mybatis如何使用Criteria的and和or进行联合查询

mybatis如何使用Criteria的and和or进行联合查询

Criteria的and和or进行联合查询

DemoExample example=new DemoExample ();
DemoExample.Criteria criteria=example.createCriteria();
criteria.andidEqualTo(id);
criteria.andStatusEqualTo("0");
  
DemoExample.Criteria criteria2=example.createCriteria();
criteria2.andidEqualTo(id);
criteria2.andstatusEqualTo("1");
example.or(criteria2);
dao.countByExample(example);

生成如下SQL

select count(*) from demo WHERE ( ID = ? and STATUS = ? ) or( ID = ? and STATUS = ? ) 

以上只是举例,实际不会去这样查询。

使用criteria 查询xx and ( xx or xx)形式的sql

a and (b or c) <==> (a and b) or (a and c)

UserExample userExample = new UserExample();
String email = user.getEmail();
String telephone = user.getTelephone();
userExample.createCriteria().andIdNotEqualTo(userId).andEmailEqualTo(email);//(id != "a" and email = "b")
if (StringUtils.isNotBlank(telephone)) {
 Criteria criteria = userExample.createCriteria().andIdNotEqualTo(userId).andTelephoneEqualTo(telephone);//(id != "a" and telephone = "c")
 userExample.or(criteria);//(id != "a" and email = "b") or (id != "a" and telephone = "c")
}
List<User> userList = userService.selectByExample(userExample);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持云海天教程。