Mybatis动态SQL-if标签

  • 执行不同的条件限定,需要准备两条sql语句

    假设需要对Product执行两条sql语句,一个是查询所有,一个是根据名称模糊查询。
    那么按照现在的方式,必须提供两条sql语句:listProduct和listProductByName
    然后在调用的时候,分别调用它们来执行。

    <?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.how2java.pojo">
            <select id="listProduct" resultType="Product">
                select * from product_         
            </select>
            <select id="listProductByName" resultType="Product">
                select * from product_  where name like concat('%',#{name},'%')        
            </select>
             
        </mapper>
    package com.how2java;
      
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     
    import com.how2java.pojo.Product;
      
    public class TestMybatis {
      
        public static void main(String[] args) throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = sqlSessionFactory.openSession();
      
            System.out.println("查询所有的");
            List<Product> ps = session.selectList("listProduct");
            for (Product p : ps) {
                System.out.println(p);
            }
             
            System.out.println("模糊查询");
            Map<String,Object> params = new HashMap<>();
            params.put("name","a");
            List<Product> ps2 = session.selectList("listProductByName",params);
            for (Product p : ps2) {
                System.out.println(p);
            }      
             
            session.commit();
            session.close();
      
        }
    }
  • if标签

    如果Product的字段比较多的话,为了应付各个字段的查询,那么就需要写多条sql语句,这样就变得难以维护。
    这个时候,就可以使用Mybatis 动态SQL里的if标签
    <select id="listProduct" resultType="Product">
    	select * from product_
    	<if test="name!=null">
    		where name like concat('%',#{name},'%')
    	</if>		 	
    </select>
    如果没有传参数name,那么就查询所有,如果有name参数,那么就进行模糊查询。
    这样只需要定义一条sql语句即可应付多种情况了,在测试的时候,也只需要调用这么一条sql语句listProduct 即可。

    <?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.how2java.pojo">
            <select id="listProduct" resultType="Product">
                select * from product_
                <if test="name!=null">
                    where name like concat('%',#{name},'%')
                </if>        
            </select>
             
        </mapper>
    package com.how2java;
      
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     
    import com.how2java.pojo.Product;
      
    public class TestMybatis {
      
        public static void main(String[] args) throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = sqlSessionFactory.openSession();
      
            System.out.println("查询所有的");
            List<Product> ps = session.selectList("listProduct");
            for (Product p : ps) {
                System.out.println(p);
            }
             
            System.out.println("模糊查询");
            Map<String,Object> params = new HashMap<>();
            params.put("name","a");
            List<Product> ps2 = session.selectList("listProduct",params);
            for (Product p : ps2) {
                System.out.println(p);
            }      
             
            session.commit();
            session.close();
      
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值