04. Mybatis 动态sql

本文详细介绍了Mybatis的动态SQL功能,包括if、choose(when, otherwise)、where、set、trim、foreach和bind等标签的用法,强调了它们在动态拼接SQL中的作用和优势,并给出了具体示例。" 111444478,10296421,Appium移动自动化测试框架解析,"['Appium', 'Python', '移动开发', '自动化测试', 'UI测试']
摘要由CSDN通过智能技术生成

Mybatis 的第三个强大特性便是它的动态SQL, 允许根据传入参数不同, 动态拼接sql. Mybatis 动态sql 功能很强大, 但是标签却很少, 这主要得益于Mybatis 动态表达式使用了Apache 的OGNL 表达式.

1. 动态sql相关标签

Mybatis 的动态sql 功能很强大, 但是标签却比较少. 大致可以分为以下四类:

  • 判断类标签: if, choose, when, otherwise
  • 拼接截断类标签: trime, where, set
  • 循环类标签: foreach
  • 自定义遍历标签: bind

2. 判断类标签

2.1 if

  • test 属性的表达式写法就是ognl 表达式写法
  • 当test 表达式为真时, 拼接sql
  • Mybatis 并没有提供else 标签, 若要实现else 功能, 可以通过test表达式取反, 或choose标签来实现
  • 此处where, 只是演示不借助于标签不优雅写法, 并不推荐使用
<!-- 通过性别查询员工列表, 如果传入sex为空, 则默认查询性别为M 的员工 -->
<select id="queryBySex" resultType="EmployeePO">
    select * from t_employee
    where
    <!-- 默认查询sex=M -->
    <if test="sex=null or sex=''">
         sex = 'M'
    </if>
    <if test="sex!=null and sex!=''" >
        sex = #{sex}
    </if>
</select>

2.2 choose(when, otherwise)

  • choose-when 标签是多条件选择标签, 类似于java 中的switch case 结构.
  • choose-otherwise 标签也可以实现if-else 结构
2.2.1 choose 实现if-else 接口
  • 如果传入sex为空, 则查询sex=M的, 否则查询sex=W 的员工列表
  • 此处where 1=1 , 只是演示不借助于标签不优雅写法, 并不推荐使用
<!-- 通过性别查询员工列表, 如果传入sex为空, 则默认查询性别为M 的员工 -->
<select id="queryBySex" resultType="EmployeePO">
    select * from t_employee
    where 1=1
    <choose>
        <when test="sex=null or sex=''">
            and sex = 'M'
        </when>
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值