criteria是Morphia框架提供的一个方法,也是对应着entity的一个属性,即数据库表的一个字段,
刚开始不知道如何使用,这里记录下:
感觉criteria是为批量处理多条件查询使用,把所有要查询的属性一一创建criteria,返回一个FieldEnd对象,再用query进行and或or一下,这时就返回个CriteriaContainer。
下面的代码将sms表中归属于手机号码列表numbers中所属号码的短信属性由未读改为已读,
那么对应的查询手机号码应该为or,这里用criteria来实现,代码如下:
- public boolean updateMultiEntities(List<String> numbers, String accountName, String read) {
- Query<SmsEntity> query = ds.createQuery(SmsEntity.class);
- UpdateOperations<SmsEntity> ops = ds.createUpdateOperations(SmsEntity.class) ;
- if(numbers.isEmpty()){
- return false;
- }
- List<CriteriaContainer> collect = new ArrayList<CriteriaContainer>();
- for(String num : numbers){
- CriteriaContainer cri = query.or(query.criteria("address").equal(num));
- collect.add(cri);
- }
- query.filter("accountName", accountName)
- .filter("read !=", read)
- //这里要用or,不能用and
- .or(collect.toArray(new Criteria[collect.size()]));
- System.out.println(query.toString());
- ops.set("read", read);
- UpdateResults<SmsEntity> result = ds.update(query, ops);
- return false;
- }
上面的查询还有更好的方式,采用in会更简单,这里只是为了记录下criteria的用法。