mybatis中的<foreach>标签很好的提供了对这类问题的解决方法,利用<foreach>标签可以实现sql条件的循环,这样这个问题就能很好的解决了
<foreach>标签的主要属性有:
1、item:集合中的一个元素,表示集合每一个元素进行迭代时的别名
2、index:索引,表示在迭代过程中,每次迭代到的位置
3、separator:表示每次迭代之间以什么符号作为分隔
4、open:表示该语句以什么开始
5、close:表示该语句以什么结束
6、collection:需要迭代的变量
collection的值其实就是mybatis把参数转化成Map以后这个Map的key,这个key对应的value必须是一个集合或者数组
例:
<foreach collection="roles" item="role" open="" close="" separator="OR">
role = #{role}
</foreach>
1、where标签
一般我们写sql语句都要写where条件,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空时,但却查出了全部的信息。这时我们可以使用动态sql,增加一个判断,当参数不符合要求的时候,我们可以不去判断此查询条件。where标签就相当于where关键字,可以自动去除第一个and。
2、if标签
if标签一般配合where标签使用,进行传入参数的判断
3、set标签
当在update语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置set关键字,
剔除追加到条件
末尾的任何不相关的逗号。
4、choose标签
有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件是否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满足时,则执行 otherwise中的sql语句。
类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。if是与(and)的关系,而choose是或(or)
的关系。
<choose>
<when test="startTime != null and startTime != '' and endTime != null and endTime != ''">
and time between #{startTime} AND #{endTime}
</when>
<otherwise></otherwise>
</choose>
5、trim标签
trim标签是灵活的去处多余关键字的标签。
标签属性
prefix:前缀覆盖并增加其内容
suffix:后缀覆盖并增加其内容
prefixOverrides:前缀判断的条件
suffixOverrides:后缀判断的条件