当前位置:   article > 正文

Mybatis动态SQL-if标签_mybatisplus if标签

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

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

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.how2java.pojo">
    6. <select id="listProduct" resultType="Product">
    7. select * from product_
    8. </select>
    9. <select id="listProductByName" resultType="Product">
    10. select * from product_ where name like concat('%',#{name},'%')
    11. </select>
    12. </mapper>
    1. package com.how2java;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.util.HashMap;
    5. import java.util.List;
    6. import java.util.Map;
    7. import org.apache.ibatis.io.Resources;
    8. import org.apache.ibatis.session.SqlSession;
    9. import org.apache.ibatis.session.SqlSessionFactory;
    10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11. import com.how2java.pojo.Product;
    12. public class TestMybatis {
    13. public static void main(String[] args) throws IOException {
    14. String resource = "mybatis-config.xml";
    15. InputStream inputStream = Resources.getResourceAsStream(resource);
    16. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    17. SqlSession session = sqlSessionFactory.openSession();
    18. System.out.println("查询所有的");
    19. List<Product> ps = session.selectList("listProduct");
    20. for (Product p : ps) {
    21. System.out.println(p);
    22. }
    23. System.out.println("模糊查询");
    24. Map<String,Object> params = new HashMap<>();
    25. params.put("name","a");
    26. List<Product> ps2 = session.selectList("listProductByName",params);
    27. for (Product p : ps2) {
    28. System.out.println(p);
    29. }
    30. session.commit();
    31. session.close();
    32. }
    33. }
  • if标签

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

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.how2java.pojo">
    6. <select id="listProduct" resultType="Product">
    7. select * from product_
    8. <if test="name!=null">
    9. where name like concat('%',#{name},'%')
    10. </if>
    11. </select>
    12. </mapper>
    1. package com.how2java;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.util.HashMap;
    5. import java.util.List;
    6. import java.util.Map;
    7. import org.apache.ibatis.io.Resources;
    8. import org.apache.ibatis.session.SqlSession;
    9. import org.apache.ibatis.session.SqlSessionFactory;
    10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11. import com.how2java.pojo.Product;
    12. public class TestMybatis {
    13. public static void main(String[] args) throws IOException {
    14. String resource = "mybatis-config.xml";
    15. InputStream inputStream = Resources.getResourceAsStream(resource);
    16. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    17. SqlSession session = sqlSessionFactory.openSession();
    18. System.out.println("查询所有的");
    19. List<Product> ps = session.selectList("listProduct");
    20. for (Product p : ps) {
    21. System.out.println(p);
    22. }
    23. System.out.println("模糊查询");
    24. Map<String,Object> params = new HashMap<>();
    25. params.put("name","a");
    26. List<Product> ps2 = session.selectList("listProduct",params);
    27. for (Product p : ps2) {
    28. System.out.println(p);
    29. }
    30. session.commit();
    31. session.close();
    32. }
    33. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/255654
推荐阅读
相关标签
  

闽ICP备14008679号