MyBatis - MyBatis Generator 生成的example and 和or的区别

2022-06-29 14:37:12

MyBatis - 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:
DemoExample example=new DemoExample();

DemoExample.Criteria criteria1=example.createCriteria();
criteria1.andAEqualTo(?).andBEqualTo(?);

DemoExample.Criteria criteria2=example.createCriteria();
criteria2.andAEqualTo(?).andCEqualTo(?);

example.or(criteria2);

SqlSession sqlSession = MyBatisUtil.openSession();
DemoMapper m = sqlSession.getMapper(DemoMapper.class);
m.countByExample(example);
//生成的sql语句
select count(*) from demo WHERE ( a = ?and b = ? )or ( a = ?and c = ? )
写法2:
DemoExample example=new DemoExample();

example.or().andAEqualTo(?).andBEqualTo(?);
example.or().andAEqualTo(?).andCEqualTo(?);

SqlSession sqlSession = MyBatisUtil.openSession();
DemoMapper m = sqlSession.getMapper(DemoMapper.class);
m.countByExample(example);
//生成的sql语句
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文件,新增方法==
public CriteriaandOrDemo(Stringvalue){
        addCriterion("(b = \""+value+"\" or c = \""+value+"\")");return (Criteria)this;
 }
DemoAction.java
DemoExample example=new DemoExample();
Criteria criteria = example.createCriteria();
criteria.andAEqualTo(?).andOrDemo(?);

SqlSession sqlSession = MyBatisUtil.openSession();
DemoMapper m = sqlSession.getMapper(DemoMapper.class);
m.countByExample(example);
//生成的sql语句
select count(*) from demo WHERE ( a = ?and ( b = ?or c = ? ))

转载:MyBatis - MyBatis Generator 生成的example 如何使用 and or 简单混合查询

  • 作者:Xu小开
  • 原文链接:https://blog.csdn.net/xiaozhenzi66/article/details/81117971
    更新时间:2022-06-29 14:37:12