Ebean or 语法
程序员文章站
2022-05-03 16:16:01
...
原生SQL语句使用or的时候我们通常会这么写:
那么使用Ebean的时候我们应该怎么操作呢?
这里就要使用Ebean的Expression表达式了,先了解下,我们使用Ebean点出or看方法提示(快捷键Ctrl+P):
可以看出or这个方法的参数其实就是两个Expression表达式,这个表达式怎么用呢?
先说两个条件的or,查找用户的userName中包含zhang或者包含li的用户:
其实就是定义两个Expression表达式,第一个表达式说用户的userName中包含zhang,第二个表达式说用户的userName包含li,然后把这两个条件or一下,就得到我们想要的数据了。
两个以上条件的or
这里先说Ebean是怎么处理多个条件的or的,给大家看个原生的sql语句:
第一种写法:
where user_name like '%zhang%' or user_name like '%li%' or user_name like '%wang%' or user_name like '%fang%'
第二种写法:
where (((user_name like '%zhang%' or user_name like '%li%') or user_name like '%wang%') or user_name like '%fang%')
这两个where条件语句大家应该都看得懂,其实是等价的,都能查出我们想要的数据,而Ebean就是按照第二种写法处理多条件or的,我们看看要怎么写:
假设我们有无线多个条件需要or,那么我们就先把前两个条件or,然后把结果括起来,和下一个条件or,再把结果括起来,然后再和下一个条件or,再把结果括起来,以此类推(没什么不好懂得,看看上面第二种sql写法就懂了)
上代码:
代码中的Expression和Expr都是Ebean用来定义表达式的,写法就是这样。
public static void main(String[] args) {
//手动强行制造or的条件(查出用户表中userName包含下面list中任意一个项的所有用户)
List<String> likeOption = new ArrayList<>();
likeOption.add("Le");
likeOption.add("Bao");
likeOption.add("Chen");
likeOption.add("Li");
likeOption.add("Chao");
ExpressionList<User> where = Ebean.find(User.class).where();
//先把前两个条件写入表达式
Expression orOption1 = Expr.like("userName", "%" + likeOption.get(0) + "%");
Expression orOprion2 = Expr.like("userName", "%" + likeOption.get(1) + "%");
//先把前两个条件or一下
Expression orOption = Expr.or(orOption1, orOprion2);
//其实这个地方如果是工作中用的话要判断有几个条件,大于两个条件的才有下面的这个for循环
//看清楚i是从2开始的
for (int i = 2; i < likeOption.size(); i++) {
//后面依次把循环到的条件,和前面所有条件or的结果,or一下(断下句,方便理解)
orOption=Expr.or(orOption,Expr.like("userName","%"+likeOption.get(i)+"%"));
}
//最后把所有条件or的结果add到where表达式中
List<User> list = where.add(orOption).findList();
for (User u : list) {
System.out.println("---------------------"+u.getUserName());
}
执行后控制台打印出SQL语句:
可以看到,正如前面所说的,Ebean是先把前两个条件or了一下,然后括起来和下一个or,再把括起来,再和下一个条件or,以此类推。
我不禁又想起了从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚对小和尚说。。。。。。。。。。