/**
*
*/
package org.howsun.dao.mongodb;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.howsun.dao.OrderBean;
import org.howsun.dao.page.Page;
import org.howsun.util.Collections;
import org.howsun.util.Strings;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
/**
* @author howsun
*
*/
public abstract class MongoGenericDaoUtil {
/**
* 仿SQL的Like查询
*Criteria.where(field).regex(String.format(REGEX_LIKE, name));
*/
//public static final java.lang.String REGEX_LIKE = "/%s/";
public static final java.lang.String REGEX_LIKE = "^.*%s.*$";
/**
* 绑定分页
* @param entityName
* @param mongoOperations
* @param query
* @param page
*/
public static void bindPaging(Class<?> entityName, MongoOperations mongoOperations, Query query, Page page){
if(page == null){
return;
}
if(page.getTotalCount() == 0){
page.setTotalCount((int)mongoOperations.count(query, entityName));
}
query.skip(page.getFirstIndex()).limit(page.getPageSize());
}
/**
* 绑定排序
* @param query
* @param orderBean
*/
public static void bindOrders(Query query, OrderBean orderBean){
if(orderBean == null){
return;
}
LinkedHashMap<String, Boolean> ov = orderBean.getOrderValue();
for(Map.Entry<String, Boolean> o : ov.entrySet()){
query.with(new org.springframework.data.domain.Sort(o.getValue() ? org.springframework.data.domain.Sort.Direction.ASC : org.springframework.data.domain.Sort.Direction.DESC, o.getKey()));
//query.sort().on(o.getKey(), o.getValue() ? Order.ASCENDING : Order.DESCENDING);
}
}
/**
* 定制字段
* @param query
* @param fields 指定的字段,多个须以逗号隔开,支持*号
*/
public static void bindFields(Query query, String fields){
if(Strings.hasLengthBytrim(fields) && !"*".equals(fields)){
String[] fs = fields.split(",");
for(String f : fs){
query.fields().include(f);
}
}
}
public static void bindFields(Query query, Set<String> fields){
if(Collections.notEmpty(fields)){
for(String f : fields){
query.fields().include(f);
}
}
}
public static void bindUpdateFieldValue(Update update, Map<String, Object> values){
if(values == null || values.size() == 0){
return;
}
for(Map.Entry<String, Object> value : values.entrySet()){
update.set(value.getKey(), value.getValue());
}
}
/**
* 根据主键和值构建查询对象
* @param id
* @param value
* @return
*/
public static Query parseQuery(String id, Object value){
Criteria critera = Criteria.where(id).is(value);
Query query = Query.query(critera);
return query;
}
}