- <if> 相当于java中的if,用于单分支的条件判断
- <choose>、<when>、<otherwise> 相当于java中的switch...case...default,用于多分支的条件判断,从多个选项中选择一个
- <foreach> 循环,常和sql的in语句搭配使用
- <where>、<trim>、<set> 辅助元素,用于一些处理sql拼装、特殊字符的问题
动态SQL会处理掉不需要的 ,(逗号)、AND 、OR 帮助我们完成数据库的操作
常用的就这么几种
<where> 的使用
<select id="queryUser" parameterType="user" resultType="user"> SELECT * FROM user_tb <where> <if test="name!=null and name!=''"> name=#{name} </if> <if test="tel!=null and tel!=''"> AND tel=#{tel} </if> </where> </select>
<set>的使用
<select id="queryUser" parameterType="user" resultType="user"> SELECT * FROM user_tb <where> <if test="name!=null and name!=''"> name=#{name} </if> <if test="tel!=null and tel!=''"> AND tel=#{tel} </if> </where> </select>
<trim> 定制where、set的功能
<select id="queryUser" parameterType="user" resultType="user"> SELECT * FROM user_tb <trim prefix="WHERE" prefixOverrides="AND"> <if test="name!=null and name!=''"> name=#{name} </if> <if test="tel!=null and tel!=''"> AND tel=#{tel} </if> </trim> </select>
prefix会在这段字符串之前加上指定的前缀,如果里面的<if>都不满足条件,则不加前缀。
prefixOverrides指定要去除的多余的字符串。
<set>同理
<choose>、<when>、<otherwise>的使用
类似于Switch Case
<select id="queryPwd" parameterType="user" resultType="string"> SELECT password FROM user_tb WHERE name=#{name} <choose> <when test="role=='admin'"> AND role='admin' </when> <when test="role=='teacher'"> AND role='teacher' </when> <when test="role=='student'"> AND role='student' </when> </choose> </select>
<foreach>的使用
<select id="queryUser" parameterType="list" resultType="user"> SELECT * FROM user_tb WHERE tel IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> #{item}
</foreach> </select>
- collection 要迭代的数据类型,数组=>array,List=>list,Map=>Map的key的数据类型。使用数组容易出错,尽量用List代替数组。
- index 本次迭代的下标,指定一个临时变量表示下标
- item 本次迭代的元素,指定一个临时变量表示本次迭代的元素
- open 拼接这段字符串时以什么开头
- close 拼接这段字符串以什么结尾
- separator 迭代的元素之间用什么连接(分隔)
collection是必需的,其余均可选。