动态SQL
动态SQL-根据不同的条件生成不同的SQL语句
1.where(if)
<select id="queryBlogIF" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<if test="title!=null">
title=#{title}
</if>
<if test="author!=null">
and author=#{author}
</if>
</where>
</select>
当满足中的条件时,执行其中的语句
会自动根据情况进行拼接,例如当两个条件都为空,拼接为
select * from mybatis.blog
当第一个条件为空,第二个不为空,会自动舍掉and,拼接为
select * from mybatis.blog where author=#{author}
2.choose(when,otherwise)
<select id="queryBlogChoose" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<choose>
<when test="title!=null">
title=#{title}
</when>
<when test="author!=null">
and title=#{title}
</when>
<otherwise>
and views=#{views}
</otherwise>
</choose>
</where>
</select>
3.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>
4.sql片段
有时候,我们可能会将一部分功能抽取出来,方便复用!
1.使用SQL标签抽取公共的部分
<sql id="if-title-author">
<if test="title!=null">
title=#{title}
</if>
<if test="author!=null">
and author =#{author}
</if>
</sql>
2.在需要的地方使用Include标签引用
<select id="queryBlogIF" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<include refid="if-title-author"></include>
</where>
</select>
3.注意:
- SQL片段不要存在where标签
- 最好基于单表来定义SQL片段
5.foreach
<select id="queryBlogForeach" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<foreach collection="ids" item="id" open="and (" close=")" separator="or">
id=#{id}
</foreach>
</where>
</select>