Mybatis入门(十) 动态SQL

2021/8/31 2:06:07

本文主要是介绍Mybatis入门(十) 动态SQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

动态SQL的官方解释:

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

本质上动态SQL就是在SQL层面,执行对应的逻辑代码,实际上还是一个sql语句

mybatis提供四个标签进行sql的动态的处理

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

if标签的使用

    //if标签内test写上对应逻辑代码,相当于if()
     <update id="updateBlog" parameterType="map">
        update bloghys
        <set>
            <if test="author !=null">
                author = #{author},
            </if>
            <if test="view !=null">
                view = #{view}
            </if>
        </set>
        where id=#{id}
    </update>

trim(where,set)标签的使用,相应说明在下面代码注释中

     //where实例,where标签内会自动清楚多余and 和or,当子属性一个至少有一个条件满足时,where才会插入。
     //例如title参数是空,where就不会插入   
    <select id="selectBlog" parameterType="map" resultType="blog">
        select * from bloghys
    <where>
        <if test="title !=null">
            and title like concat('%',#{title},'%')
        </if>
    </where>

    </select>


     //set实例,set标签内会自动清楚多余的",",当子属性一个至少有一个条件满足时,set才会插入。   
    <update id="updateBlog" parameterType="map">
        update bloghys
        <set>
            <if test="author !=null">
                author = #{author},
            </if>
            <if test="view !=null">
                view = #{view}
            </if>
        </set>
        where id=#{id}
    </update>

    //trim标签实例,where和set其实都trim标签,它有四个参数可以使用
    //prefix表示插入最前面的需要插入的字段,suffix表示最后面的字段
    //suffixOverrides表示结尾剔除的东西
    //prefixOverrides表示开头剔除的东西 下面就是set的例子,和set效果一致
    <update id="updateBlog" parameterType="map">
        update bloghys
        <trim prefix="set" suffixOverrides=",">
            <sql id="if-author-view">
                <if test="author !=null">
                    author = #{author},
                </if>
                <if test="view !=null">
                    view = #{view}
                </if>
            </sql>
        </trim>
        where id=#{id}
    </update>

 

choose(when,otherwise)使用

    //相当于java的switch语句,选择一个且只能选择一个,条件满足时,其他when就不在匹配,所有的when都不满足,就会满足oherwise
    <select id="selectBlogChoose" parameterType="map" resultType="blog">
        select * from bloghys
        <where>
            <choose>
                <when test="title !=null">
                    and title=#{title}
                </when>
                <otherwise>
                    and view=#{view}
                </otherwise>
            </choose>
        </where>
    </select>

foreach的使用,这个使用入参时区分三种情况,当入参是集合时,collection=list,当入参是数组是collection=array,

 当入参是map集合时,collection等于map里对应key值

   //foreach有六个参数,collection对标集合,item代表集合里每个元素,名字随便取,下面语句会使用这个参数,
   //index代表索引,一般不用,open代表返回的集合以什么开始,cloes代表以什么结束,
separator代表分隔符,一般都是用来in(1,2,3) 所以open="(" close=")" separator="," 一般这样使用
  <select id="selectBlogbyForeach" parameterType="list" resultType="blog">
        select * from bloghys
        <where>
            id in
            <foreach collection="list" open="(" close=")" separator="," item="item">
                #{item}
            </foreach>
        </where>
    </select>

SQL片段使用

当需要用的sql语句存在大幅使用时,可以将他提取为公共片段,然后用include引入,代码如下

    <update id="updateBlog" parameterType="map">
        update bloghys
        <trim prefix="set" suffixOverrides=",">
            <include refid="if-author-view"></include>
        </trim>
        where id=#{id}
    </update>
    
    <sql id="if-author-view">
        <if test="author !=null">
            author = #{author},
        </if>
        <if test="view !=null">
            view = #{view}
        </if>
    </sql>

 



这篇关于Mybatis入门(十) 动态SQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程