Ebean or 语法

原生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,以此类推。

我不禁又想起了从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚对小和尚说。。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值