23-动态SQL之IF语句

本文介绍了MyBatis中如何使用IF语句进行动态SQL查询,并展示了如何通过WHERE标签优化查询效率。同时,讲解了如何利用SQL片段进行代码复用,提高代码可维护性。在示例中,展示了IF语句在查询博客时根据传入参数动态添加过滤条件的过程。测试部分展示了如何根据作者查询博客。最后,提到了SQL片段的注意事项,如避免在片段中使用WHERE标签。

动态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标签
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值