七.动态sql

1.基本的标签

动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似嗷。

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

2.if

<!--    你给我传啥 我按啥查 如果啥也没传 我就查询全部的信息-->
<select id="queryListBlogIF" parameterType="Map" resultType="Blog">
select * from blog where 6=6
<!-- 如果titile不为空 则按照titile查询 --> <if test="title!=null"> and title=#{title} </if>
<!--如果作者不为null 同理--> <if test="author!=null"> and author=#{author} </if> <if test="views!=null"> and views=#{views} </if> </select> </mapper>

2.where+if

解决了 当输入的属性为空我们要加入where 1=1的困扰

使用where标签升级后
<!--    你给我传啥 我按啥查 如果啥也没传 我就查询全部的信息-->
<select id="queryListBlogIF" parameterType="Map" resultType="Blog">
select * from blog
<where>
    <if test="title!=null">
        and title=#{title}
    </if>
    <if test="author!=null">
        and author=#{author}
    </if>
</where>

3.choose (when, otherwise)

就是swich case 当有一个成立就跳出循环了

<!--    使用choose 来查询-->
<select id="queryListBlogChoose" parameterType="Map" resultType="Blog">
    select  * from blog
<where>
    <choose >
    <when test="title!=null">
     title=#{title}
    </when>
    <when test="title!=null and author!=null">
        and title=#{title} and author=#{author}
    </when>
    <otherwise>
         views=${views}
    </otherwise>
    </choose>
</where>


</select>

 

4.set标签 自动去除多余的(,)逗号

<update id="updateBlog" parameterType="map">
    update mybatis.blog
    <set>
        <if test="title != null">
            title = #{title},
        </if>
        <if test="author != null">
            author = #{author}
        </if>
    </set>
    where id = #{id}
</update>

 

5.trim 

这个能自定义上面的标签

目前没用用到这个功能,现用现学

 

6. foreach

 

 

<!--根据你给我的list集合 查询结果-->
<select id="queryById" parameterType="map" resultType="Blog">
select  * from blog
<where>
    <foreach collection="ids" open="and (" separator="or" close=")" item="id">
       id=#{id}
    </foreach>
</where>
</select>

 

7.sql片段

将一个常用的sql抽取出来,作为一个公共部分,需要的时候直接调用

  通用片段
    <sql id="if">
        <if test="title!=null">
            and title=#{title}
        </if>
        <if test="author!=null">
            and author=#{author}
        </if>
    </sql>

使用sql片段

<!-- 你给我传啥 我按啥查 如果啥也没传 我就查询全部的信息-->
<select id="queryListBlogIF" parameterType="Map" resultType="Blog">
select * from blog
<where>
引用这个片段
<include refid="if"> </include>
</where>

<if test="views!=null">
and views=#{views}
</if>
</select>

 

posted @ 2020-08-28 22:16  why666  阅读(119)  评论(0编辑  收藏  举报