23-动态SQL之IF语句

动态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标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值