当前位置: 首页 > news >正文

Mybatis相关知识(学习自用)

一、什么是Mybatis

1、ORM框架

本质:关系对象映射。

作用:将数据库中的数据映射成java中的对象。帮助我们查数据,写数据】

二、Mybatis的相关操作

1、Mybatis传参

#{}:预编译形式

${}:拼接字符串的形式--表名或视图

@Param()指定参数的名字

2、SQL语句设置多个参数的方式

3、动态SQL语句

if

choose

 

 

set

  1. 动态字段拼接:

    • <set> 标签内部可以包含多个 <if> 标签,每个 <if> 标签用于判断是否需要更新某个字段。

    • 如果某个字段的值为 null,则该字段不会被包含在更新语句中。

  2. 自动处理逗号:

    • <set> 标签会自动处理字段之间的逗号分隔符。MyBatis 会智能地移除最后一个多余的逗号,确保生成的 SQL 语句语法正确。

where

     1、自动添加 WHERE 关键字: 如果有动态条件,则自动添加 WHERE 关键字;如果没有条件,则不会添加多余的 WHERE

     2、自动处理逻辑关系: <where> 标签会智能地处理条件之间的 ANDOR 关系,并确保语法正确。

     3、避免 SQL 注入: 结合 MyBatis 的参数绑定机制,可以有效避免 SQL 注入问题。

bind

<bind> 标签可以将复杂的表达式或逻辑抽取出来,创建一个局部变量,从而简化 SQL 语句

<select id="searchUser">
    <bind name="pattern" value="'%' + keyword + '%'" />
    SELECT * FROM user WHERE name LIKE #{pattern}
</select>

trim

    1、自动添加或删除关键字: 可以在生成的 SQL 片段前添加(或不添加)WHERESETANDOR 等关键字。

    2、自动处理多余的分隔符: 可以自动删除片段末尾多余的逗号、ANDOR 等。

    3、灵活控制 SQL 片段的格式: 可以根据需要动态调整生成的 SQL 片段。

<trim> 标签有以下几个重要的属性:

  • prefix: 在片段开头添加的内容。

  • suffix: 在片段结尾添加的内容。

  • prefixOverrides: 需要从片段开头移除的内容(如多余的 ANDOR)。

  • suffixOverrides: 需要从片段结尾移除的内容(如多余的逗号)。

  • <select id="findUsers" parameterType="map" resultType="User">
        SELECT * FROM users
        <trim prefix="WHERE" prefixOverrides="AND |OR">
            <if test="username != null">
                AND username = #{username}
            </if>
            <if test="email != null">
                OR email = #{email}
            </if>
        </trim>
    </select>
    
    如果有动态条件,<trim> 会自动添加 WHERE 关键字。
    如果条件为空,则不会生成多余的 WHERE。
    prefixOverrides 用于移除多余的 AND 或 OR。

 

<update id="updateUser" parameterType="map">
    UPDATE users
    <trim prefix="SET" suffixOverrides=",">
        <if test="username != null">
            username = #{username},
        </if>
        <if test="email != null">
            email = #{email},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
    </trim>
    WHERE id = #{id}
</update>



<trim> 会自动添加 SET 关键字。
suffixOverrides 用于移除字段列表末尾多余的逗号。

foreach

4、如何解决实体类的属性和数据库字段名称不一致的情况

1)在每次编写sql语句时为数据库字段名称起别名,改为和实体类相同的名称。

但这种比较麻烦,每次编写都得写很多代码。

2)采用SQL片段的形式提前将他们之间的转换写好,然后每次编写SQL时调用即可。

<sql></sql><include></include>字段完成

但这种方式还是不太好,因为不可能每次都查找所有的字段,还可能只查询某些字段,这样编写还是比较多,不够灵活。

3)用resultMap可以实现数据库字段到实体类字段的映射,从而一一对应

 

 5、如何返回主键

6、参数封装

在xml文件中如何使用dao层各个方法的参数名

 

三、注解完成增删改查

相关文章:

  • Linux、Docker、Redis常见面试题
  • PLC通讯
  • 关于雷龙CS SD NAND(贴片式TF卡)的测评体验
  • 安装 redis 5.0.14 版本
  • 9.三重积分、线面积分、场论初步(基础知识)(二)
  • java实现二维码图片生成和编解码
  • Python开发Django面试题及参考答案
  • 重学SpringBoot3-WebClient配置与使用详解
  • conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能
  • Python爬虫基础重要数据类型
  • Vulnhun靶机-kioptix level 4-sql注入万能密码拿到权限ssh连接利用mysql-udf漏洞提权
  • Docker Network
  • std::thread的同步机制
  • Android构建系统 - 01 环境准备
  • Python基于flask的智慧交通可视化,大数据智慧交通数据可视化系统
  • DINOv2 + yolov8 + opencv 检测卡车的可拉拽雨覆是否完全覆盖
  • Open WebUI中的Pipelines是什么
  • go:运行第一个go语言程序
  • luci界面开发中的MVC架构——LuCI介绍(二)
  • 精准删除:掌握SQL中的DELETE语句
  • 网站网格设计/电商平台哪个最好最可靠
  • 在家帮诈骗团伙做网站/网络seo推广
  • 免费网站的资源可以发公众号吗/会计培训班
  • 建站平台塔山双喜/最好的免费信息发布平台
  • 手机app网站开发/seo点击软件手机
  • 网站排名如何稳定/如何宣传自己的网站