MyBatis 学习笔记(三) 动态SQL语句 | trim标签、foreach标签、choose标签 | MyBatis缓存机制 | MyBatis 逆向工程使用案例

参考资料


SPOC
还有一些参考的文章,都有在相应部分标注。

运行环境


  • windows10
  • IDEA 2021.6 专业版
  • MyBatis3.5.0

获取Demo


Gitee:https://gitee.com/ccuni/mybatis-learn-quick-get-start

一、MyBatis 动态 SQL


实现动态SQL的标签主要有 if、 trim 、 where 、 set 、 choose (when 、 otherwise)、foreach

1.1 if 标签

基本语法:

<if test="表达式">若表达式成立则返回的字符串</if>

功能描述: 可根据参数的值选择SQL语句执行的参数,是实现动态SQL的关键标签。

使用案例: 在实现修改功能时,若缺少参数,比如只修改一部分信息的情况,此时的SQL语句需要根据实体类对象的值进行判断,若为NULL则不进行修改,以供应商信息修改为例:

<!-- 修改供应商信息 -->
<update id="modifyProvider" parameterType="Provider">
    UPDATE smbms_provider
    <set>
        <if test="proCode!=null">proCode=#{proCode},</if>
        <if test="proName!=null">proName=#{proName},</if>
        <if test="proDesc!=null">proDesc=#{proDesc},</if>
        <if test="proContact!=null">proContact=#{proContact},</if>
        <if test="proPhone!=null">proPhone=#{proPhone},</if>
        <if test="proAddress!=null">proAddress=#{proAddress},</if>
        <if test="proFax!=null">proFax=#{proFax},</if>
        <if test="modifyDate!=null">modifyDate=#{modifyDate}</if>
    </set>
    WHERE id=#{id}
</update>

1.2 where 标签

基本语法:

<where>
	<!--...sql语句-->
</where>

功能描述: 简化SQL语句中的where条件判断、只能处理and和or

使用案例: 以实现根据用户名称和用户角色的查询为例,有可能缺少一个参数

<select id="queryUserByDSQL" resultType="User" parameterType="User">
    SELECT * FROM smbms_user
    <where>
    	<if test="userName != null and userName != ''">
        	userName like CONCAT('%', #{userName}, '%')
        </if>
        <if test="userRole != null">
        	AND userRole = # {userRole}
        </if>
    </where>
</select>

注:若不使用 where标签,当 userName为空时,SQL语句为 SELECT * FROM smbms_user WHERE AND ... 则为不合法SQL语句

1.3 set 标签

基本语法:

<set>
    <!-- SQL语句 -->
</set>

功能描述: 可以搭配 IF 标签,过滤实体类变量为 NULL的情况。

使用案例可参考IF标签的案例。

1.4 trim 标签

基本语法:

<trim prefix="..." suffix="..." prefixOverrides="..." suffixOverrides="...">
</trim>

功能描述: 更灵活的去除多余的关键字,可以替代 whereset

属性说明:

属性值 描述
prefix 前缀,作用是通过自动识别是否有返回值后,在 trim 包含的内容上加上前缀,如此处的where
suffix 后缀,作用是在trim包含的内容加上后缀
prefixOverrides 对于 trim 包含内容的首部进行指定内容的忽略
suffixOverrides 对于 trim 包含内容的尾部进行指定内容的忽略

使用案例:

  • 更新用户表数据
<update id="..." parameterType="User">
	UPDATE smbms_user
    <trim prefix ="set" suffixOverrides="," suffix="WHERE id = #{id}">
        <if test="userCode != null">userCode=#{userCode},</if>
        <if test="userName != null">userName=#{userName},</if>
        <if test="userPassword != null">userPassword=#{userPassword},</if>
    </trim>
</update>
  • 根据用户名、用户角色查询,其中用户名为模糊查询
<trim prefix="WHERE" prefixOverrides="AND|OR">
	
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值