Example 对象是一种简化条件查询的方案。通过它,你避免去编写大量的 DAO 中的 selectByXxx() 方法。
在对单表进行条件查询时,Example 对象非常好用,但是对于「多表关联查询,且查询条件分散在多表中的情况」Example 对象就无能为力了。这种情况下,在不引入新的方案的前提下,则需要使用之前的「注解」功能,由程序员自己编码 SQL 语句了。
简单的情况
这里的简单情况指的是:没有,或只有 and 关系:
EmployeeExample example = new EmployeeExample();
example.createCriteria()
.andEmpnoEqualTo(7369)
.andSalGreaterThanOrEqualTo(1500)
.andSalLessThan(2000);
List<Employee> list = dao.selectByExample(example);
System.out.println(list.size());
or() 方法是一个更通用的形式,可以用于实现任意的查询条件。其原理在于,任何一个复杂的查询语句,总能写成如下形式:
where (... and ... and ...) or (... and ... and ...) or (...)
复杂的情况
这里的复杂情况指的是:有 or 关系,甚至是 and 和 or 混用。
TestTableExample example = new TestTableExample();
// 第 1 个括号中的两个并列条件
example.or()
.andAaaEqualTo(5)
.andBbbIsNull();
// 第 2 个括号中的两个并列条件
example.or()
.andCccNotEqualTo(9)
.andDddIsNotNull();
// 第 3 个括号中的唯一的条件
List<Integer> list = new ArrayList<Integer>();
list.add(8);
list.add(11);
list.add(14);
list.add(22);
example.or()
.andEeeIn(field5Values);
// 第 4 个括号中的唯一的条件
example.or()
.andFffBetween(3, 7);
相当于
where (aaa = 5 and bbb is null)
or (ccc != 9 and ddd is not null)
or (eee in (8, 11, 14, 22))
or (fff between 3 and 7);
网友评论