【MyBatis】深入解析 MyBatis:使用 set 标签动态设置 SQL 字段的方法和使用 sql 标签定义可重用的 SQL 片段及通过 include 标签的 refid 属性指定 SQL片段

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


MyBatis 动态 SQL


<set> 标签


需求:根据传入的用户对象属性来更新用户数据,可以使用 <set> 标签来指定动态内容。

接口定义:根据传入的用户 id 属性,修改其他不为 null 的属性

image-20250405212437077


单元测试:

image-20250405212832185


运行对应测试类方法,观察打印日志:

image-20250405213002785


确认表对应记录是否更新数据:

image-20250405213046012


每次更新并不会每一个字段都是必须更新的,所以我们引入 <if>标签设置动态更新字段

image-20250405213749356


image-20250405214049331


运行对应测试类方法,观察打印日志:

image-20250405214141501


确认表对应记录是否更新数据:

image-20250405214210772


虽然当前写的 MyBatis XML 已经满足我们的需求了,但是我们还是要介绍另一种更新方法;

也就是在更新语句中引入 <set>标签;

image-20250405215309230


运行对应测试类方法,观察打印日志:

image-20250405215528871


确认表对应记录是否更新数据:

image-20250405215735681

因为没有对 gender 属性传参,所以 gender 从 1 变成了 0,说明这条数据也是被更新了的;


<set>:动态的在SQL语句中插入set关键字,并会删掉额外的逗号。(用于update语句中)

以上标签也可以使用 <trim prefix="set" suffixOverrides=","> 替换。


或者使用注解方式:

image-20250403132656998


<include> 标签 & <sql> 标签


问题分析:

  • 在xml映射文件中配置的SQL,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码

image-20250403132842301


我们可以对重复的代码片段进行抽取,将其通过 <sql> 标签封装到一个SQL片段,然后再通过 <include> 标签进行引用。

  • <sql>:定义可重用的SQL片段 (这个片段不一定可执行)
  • <include>:通过属性 refid,指定包含的SQL片段
<sql id="allColumn">
    id,
    username,
    age,
    gender,
    phone,
    delete_flag,
    create_time,
    update_time
</sql>

通过 <include> 标签在原来抽取的地方进行引用。操作如下:

<select id="queryAllUser" resultMap="BaseMap">
    SELECT
    <include refid="allColumn"/>
    FROM userinfo
</select>

<select id="queryById" resultType="com.example.demo.model.UserInfo">
    SELECT
    <include refid="allColumn"/>
    FROM userinfo 
    WHERE id = #{id}
</select>

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值