动态sql拼接
if 标签
if标签通常用于WHERE语句、UPDATE语句、INSERT语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。
<if test="name != null and name != ''">
and NAME = #{name}
</if>
foreach 标签
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
属性介绍:
collection:collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合。
item :表示在迭代过程中每一个元素的别名
index :表示在迭代过程中每次迭代到的位置(下标)
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔
choose标签
有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。
if是与(and)的关系,而choose是或(or)的关系。
<choose>
<when test="Name!=null and student!='' ">
AND name LIKE CONCAT(CONCAT('%', #{student}),'%')
</when>
<when test="hobby!= null and hobby!= '' ">
AND hobby = #{hobby}
</when>
<otherwise>
AND AGE = 15
</otherwise>
</choose>
mybatis中like怎么写
有两种写法,不要在SQL中拼接,会造成SQL注入的安全问题
concat
SELECT * FROM user
<trim prefix="where" prefixOverrides="and">
<if test="name !=null">
name like concat('%',#{name},'%')
</if>
and age=20
</trim>
bind
<bind name="pattern" value="'%' + name + '%'"></bind>
SELECT * FROM user
<trim prefix="where" prefixOverrides="and">
<if test="name !=null">
name like #{pattern}
</if>
and age=20
</trim>
mybatis中 大于,小于号怎么写
使用xml语法转义:>为大于号“ >”; < 为小于号 “<” ;
SELECT * FROM user
<trim prefix="where" prefixOverrides="and">
<if test="name !=null">
name like concat('%',#{name},'%')
</if>
and create_time <= #{createTime}
</trim>
使用<![CDATA[]]>,因为CDATA 部分中的所有内容都会被解析器忽略,所以建议使用<![CDATA[]]>
SELECT * FROM user
<trim prefix="where" prefixOverrides="and">
<if test="name !=null">
name like concat('%',#{name},'%')
</if>
<![CDATA[ and create_time <= #{createTime} ]]>
</trim>