Mybatis的example 如何使用 and or 简单混合查询

Mybatis的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 Criteria andOrDemo(String value){
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 Generator生成的Example类默认使用AND连接查询条件,如果要使用OR连接查询条件,可以使用Example类提供的or()方法。具体步骤如下: 1. 生成Example类 首先使用MyBatis Generator生成Example类,例如: ``` <table tableName="user" domainObjectName="User" > <generatedKey column="id" sqlStatement="MySql" identity="true" /> <property name="useActualColumnNames" value="true" /> </table> ``` 生成的UserExample类中包含了一些基本的查询方法,如: - andXxxEqualTo() - andXxxNotEqualTo() - andXxxGreaterThan() - andXxxGreaterThanOrEqualTo() - andXxxLessThan() - andXxxLessThanOrEqualTo() - andXxxLike() - andXxxNotLike() - andXxxIn() - andXxxNotIn() 2. 使用or()方法连接OR查询条件 在Example类中,可以使用or()方法连接OR查询条件。例如: ``` UserExample example = new UserExample(); example.or().andUsernameEqualTo("user1").andAgeGreaterThan(20); example.or().andUsernameEqualTo("user2").andAgeGreaterThan(30); ``` 以上代码表示查询满足以下条件之一的用户: - username等于"user1"且age大于20 - username等于"user2"且age大于30 其中,第一个or()方法连接的是第一个条件,第二个or()方法连接的是第二个条件。or()方法可以使用多次,每次连接一个条件。 3. 执行查询 最后,使用Mapper接口的selectByExample()方法执行查询: ``` List<User> userList = userMapper.selectByExample(example); ``` 以上代码会返回符合查询条件的用户列表。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值