criteria是Morphia框架提供的一个方法,也是对应着entity的一个属性,即数据库表的一个字段,

刚开始不知道如何使用,这里记录下:

感觉criteria是为批量处理多条件查询使用,把所有要查询的属性一一创建criteria,返回一个FieldEnd对象,再用query进行and或or一下,这时就返回个CriteriaContainer。

下面的代码将sms表中归属于手机号码列表numbers中所属号码的短信属性由未读改为已读,

那么对应的查询手机号码应该为or,这里用criteria来实现,代码如下:

 

 
  
  1. public boolean updateMultiEntities(List<String> numbers, String accountName, String read) { 
  2.     Query<SmsEntity> query = ds.createQuery(SmsEntity.class); 
  3.     UpdateOperations<SmsEntity> ops = ds.createUpdateOperations(SmsEntity.class) ; 
  4.      
  5.     if(numbers.isEmpty()){ 
  6.         return false
  7.     } 
  8.      
  9.     List<CriteriaContainer> collect = new ArrayList<CriteriaContainer>(); 
  10.  
  11.     for(String num : numbers){ 
  12.         CriteriaContainer cri = query.or(query.criteria("address").equal(num)); 
  13.         collect.add(cri); 
  14.     } 
  15.      
  16.     query.filter("accountName", accountName) 
  17.     .filter("read !=", read) 
  18.     //这里要用or,不能用and 
  19.     .or(collect.toArray(new Criteria[collect.size()])); 
  20.      
  21.     System.out.println(query.toString()); 
  22.      
  23.    ops.set("read", read); 
  24.    UpdateResults<SmsEntity> result = ds.update(query, ops);         
  25.     return false

上面的查询还有更好的方式,采用in会更简单,这里只是为了记录下criteria的用法。