简单介绍:

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 = ? ))

最新文章

  1. c++多重继承
  2. cout输出控制——位数和精度控制
  3. 实战之中兴ZXHN F460光猫破解超级密码+开启无线路由功能
  4. 类加载器ClassLoader之jar包隔离
  5. laravel----------------自动生成模型,控制器,视图的操作步骤。
  6. SQL Server里等待统计(Wait Statistics)介绍
  7. 在桌面chrome中调试android设备中的web页面
  8. 【转】android UI进阶之自定义组合控件
  9. Javascript中typeof instanceof constructor的区别
  10. hdu 4061 A Card Game
  11. jquery ashx
  12. PAT (Advanced Level) 1029. Median (25)
  13. jquery的2.0.3版本源码系列(5):349-817行,extend添加的工具方法
  14. SpringBoot中@ManyToMany的坑
  15. C#基础加强(6)之引用相等与运算符重载
  16. synchronized和ReentrantLock的区别
  17. JavaAndroid项目结构
  18. 几个常用dos网络命令
  19. 17秋 软件工程 第六次作业 Beta冲刺 Scrum4
  20. [py]django表单不清空实现的2种方法

热门文章

  1. ​插件化DPI在商用WIFI中的价值
  2. Quartz 原理
  3. redis集群cluster模式搭建
  4. jquery 获取访问当前页面的开源设备信息
  5. HBase使用压缩存储(snappy)
  6. Gym - 101806T: Touch The Sky(贪心)
  7. 两个Inline-block元素不对齐
  8. pip3 install scrap报错
  9. AtCoder Grand Contest 031 B - Reversi
  10. Python基础( )