Mybatis ——动态SQl

简介:

Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了 解决 拼接SQL语句字符串时的痛点问题。

参考:

参考: mybatis – MyBatis 3 | 动态 SQL

 SQl片段

sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入


eid,ename,age,sex,did

select  from t_emp

1、if

if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行


2、where

where和if一般结合使用:

a、若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字

b、若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的 and去掉

注意:where标签不能去掉条件最后多余的and( 不要把and /or 写在子句的后面)


3、trim

trim用于去掉或添加标签中的内容

常用属性:

prefix:在trim标签中的内容的前面添加某些内容    // trim和if结合使用,要看清楚trim标签的内容到底是什么

prefixOverrides:在trim标签中的内容的前面去掉某些内容

suffix:在trim标签中的内容的后面添加某些内容

suffixOverrides:在trim标签中的内容的后面去掉某些内容


 官网中提到:如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:


  ...

prefixOverrides 属性会忽略通过管道符分隔的文本序列(注意此例中的空格是必要的)。上述例子会移除所有 prefixOverrides 属性中指定的内容,并且插入 prefix 属性中指定的内容。

4、choose、when、otherwise

choose、when、 otherwise相当于if...else if..else

官网描述:

有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

还是上面的例子,但是策略变为:传入了 “ename” 就按 “ename” 查找,传入了 “age” 就按 “age” 查找的情形,传入了 “gender” 就按 “gender” 查找的情形,传入了 “email” 就按 “email” 查找的情形,


5、foreach

动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)。

foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。

你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。



insert into t_emp values

(null,#{emp.ename},#{emp.age},#{emp.sex},#{emp.email},null)





delete from t_emp where

eid = #{eid}




delete from t_emp where eid in

#{eid}

你可能感兴趣的:(ORM,mybatis,sql,数据库)