• MyBatis Generator 生成的example 如何使用 and or 简单混合查询


    简单介绍:

    Criteria,包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系。
    oredCriteria,Example内有一个成员叫oredCriteria,是Criteria的集合,就想其名字所预示的一样,这个集合中的Criteria是由OR连接的,是逻辑或关系。oredCriteria就是ORed Criteria。
    or()方法,会产生一个新的Criteria对象,添加到oredCriteria中,并返回这个Criteria对象,从而可以链式表达,为其添加Criterion。

    查询条件1:a=? and (b=? or c=?) 不支持

    查询条件2:(a=? And b=?) or (a=? And c=?) 支持

    写法1:

    复制代码
     1 DemoExample example=new DemoExample();  
     2 
     3 DemoExample.Criteria criteria1=example.createCriteria();  
     4 criteria1.andAEqualTo(?).andBEqualTo(?);  
     5           
     6 DemoExample.Criteria criteria2=example.createCriteria();  
     7 criteria2.andAEqualTo(?).andCEqualTo(?);  
     8 
     9 example.or(criteria2);  
    10 
    11 SqlSession sqlSession = MyBatisUtil.openSession();
    12 DemoMapper m = sqlSession.getMapper(DemoMapper.class);
    13 m.countByExample(example);  
    14 //生成的sql语句
    15 select count(*) from demo WHERE ( a = ? and b = ? ) or ( a = ? and c = ? )
    复制代码

    写法2:

    复制代码
     1 DemoExample example=new DemoExample();  
     2 
     3 example.or().andAEqualTo(?).andBEqualTo(?);
     4 example.or().andAEqualTo(?).andCEqualTo(?); 
     5 
     6 SqlSession sqlSession = MyBatisUtil.openSession();
     7 DemoMapper m = sqlSession.getMapper(DemoMapper.class);
     8 m.countByExample(example);  
     9 //生成的sql语句
    10 select count(*) from demo WHERE ( a = ? and b = ? ) or ( a = ? and c = ? )
    复制代码

     查询条件3:(a=? and (b=? or c=?)) 支持

    假设两个搜索项,A项搜索,可搜索b,c(bc或关系),B项搜索可搜索a,B项搜索与A项搜索是与关系。

    修改DemoExample.java文件,新增方法

    1 public Criteria andOrDemo(String value){
    2         addCriterion("(b = ""+value+"" or c = ""+value+"")");
    3         return (Criteria) this;
    4 }

    DemoAction.java

    复制代码
    1 DemoExample example=new DemoExample();  
    2 Criteria criteria = example.createCriteria();
    3 criteria.andAEqualTo(?).andOrDemo(?);
    4 
    5 SqlSession sqlSession = MyBatisUtil.openSession();
    6 DemoMapper m = sqlSession.getMapper(DemoMapper.class);
    7 m.countByExample(example);  
    8 //生成的sql语句
    9 select count(*) from demo WHERE ( a = ? and ( b = ? or c = ? ))
    复制代码
  • 相关阅读:
    指针数组与数组指针
    209. 长度最小的子数组
    面试题 05.08. 绘制直线(位运算)
    1160. 拼写单词
    88. 合并两个有序数组
    80. 删除排序数组中的重复项 II(On)
    python自定义异常和主动抛出异常
    类的构造方法1(类中的特殊方法)
    python之判断一个值是不是可以被调用
    主动调用其他类的成员(普通调用和super方法调用)
  • 原文地址:https://www.cnblogs.com/zzt-lovelinlin/p/8126966.html
Copyright © 2020-2023  润新知