动态SQL之IF语句
接口
//查询博客
List<Blog> queryBlogIF(Map map);
对应的xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tian.dao.BlogMapper">
<select id="queryBlogIF" parameterType="map" resultType="blog">
select * from mybatis.blog where 1=1
<if test="title != null">
and title=#{title}
</if>
<if test="author != null">
and author=#{author}
</if>
</select>
</mapper>
改造用where标签
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tian.dao.BlogMapper">
<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>
</mapper>
测试
@Test
public void queryBlogIF(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map= new HashMap();
//根据条件查询
//map.put("title","java如此简单");
map.put("author","狂神说");
mapper.queryBlogIF(map);
sqlSession.close();
}
SQL片段
- 有的时候我们可能会将一些功能的部分抽取出来,方便复用!
1.使用SQL标签抽取公共的部分
2.在需要使用的地方使用include标签引用即可
<sql id="textif">
<if test="title != null">
and title=#{title}
</if>
<if test="author != null">
and author=#{author}
</if>
</sql>
<select id="queryBlogIF" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<include refid="textif"></include>
</where>
</select>
注意事项:
- 最好基于单表定义SQL片段!
- 不要存在where标签
本文介绍了MyBatis中如何使用IF语句进行动态SQL查询,并展示了如何通过WHERE标签优化查询效率。同时,讲解了如何利用SQL片段进行代码复用,提高代码可维护性。在示例中,展示了IF语句在查询博客时根据传入参数动态添加过滤条件的过程。测试部分展示了如何根据作者查询博客。最后,提到了SQL片段的注意事项,如避免在片段中使用WHERE标签。
974

被折叠的 条评论
为什么被折叠?



