我正在尝试进行查询,我想检查用户的电子邮件或名称是否以给定字符串开头.在sql查询中我会用这个写
name like 'queryString%' or email like 'queryString%'
Run Code Online (Sandbox Code Playgroud)
在ebean查询中,我希望写一些类似于:
find.where().or(like('name', 'queryString%'), like('email', 'queryString%'));
Run Code Online (Sandbox Code Playgroud)
问题是,或者接受表达式,而不是表达式列表,这是我在写作时得到的
find.where().like(...,...)
Run Code Online (Sandbox Code Playgroud)
据我所知,它做了这样的查询:
find.where().like(.., ...).like(..., ...)
Run Code Online (Sandbox Code Playgroud)
正在使用AND.
如何使用ebean编写这样的查询?
谢谢!
bie*_*ior 25
你的第二次尝试几乎没问题,你必须在com.avaje.ebean.Expr.like()里面使用or()
find.where().or(
com.avaje.ebean.Expr.like("email", email + "%"),
com.avaje.ebean.Expr.like("name", name + "%")
).findUnique();
Run Code Online (Sandbox Code Playgroud)
当然你可以使用导入更短的代码::
import com.avaje.ebean.Expr;
...
find.where().or(Expr.like("email", email + "%"),Expr.like("name", name + "%")).findUnique();
Run Code Online (Sandbox Code Playgroud)
检查Javadoc中的API:http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/Expr.html
请注意,您还可以通过disjunction(),conj()和endJunction()使用流体样式.
例如:
Query<Conversation> query = Ebean.find(Conversation.class)
.where().eq("group.id", groupId)
.disjunction()
.conjunction()
.eq("open", false).eq("participants.user.id", userId)
.endJunction()
.eq("open", true)
.endJunction()
.orderBy("whenCreated desc");
Run Code Online (Sandbox Code Playgroud)
并且使用类型安全查询bean的示例类似但是使用or(),and(),endAnd(),endOr()...而不是disjunction()/ conjunction()等.
List<Customer> customers
= new QCustomer()
.billingAddress.city.equalTo("Auckland")
.version.between(1,100)
.billingAddress.country.equalTo(nz)
.registered.before(new Date())
.or()
.id.greaterThan(1)
.and()
.name.icontains("Jim")
.inactive.isTrue()
.endAnd()
.endOr()
.orderBy()
.name.asc()
.id.desc()
.findList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13669 次 |
| 最近记录: |