Mybatis--->动态SQL

  • <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是必需的,其余均可选。

原文地址:https://www.cnblogs.com/springxian/p/13538175.html