七.动态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.
<!--根据你给我的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>