spring mongodb 查询封装
2015-07-31 14:47
387 查看
通过mongodb的query查询
直接mongoTemple直接调用即可public List<T> findByQuery(String query){ BasicQuery basicQuery = new BasicQuery(query); return mongoTemplate.find(basicQuery, entityClass); }
通过Criteria的调用
multiArgs中包含调用方法的参数是Collection对象,需要进行特殊处理,否则反射的时候会找不到方法。private static String[] multiArgs = new String[]{"nin","in","all"};
通过反射得到Criteria,然后通过mongoTemple再调用query.
Map<String,Map<String,Object>> qMap
第一个Map中的key,是进行查询时候的方法。eg:lt,gt..
第二个Map中key,value。分别是实体的属性和查询的值
public Criteria createCriteria(Map<String,Map<String,Object>> qMap) { Criteria c = new Criteria(); List<Criteria> listC= new ArrayList<Criteria>(); for(String op : qMap.keySet()){ Map<String,?> rmap = qMap.get(op); for (String _s : rmap.keySet()) { Criteria criteria = Criteria.where(_s); Class[] argType = new Class[]{Object.class}; Object[] args = new Object[]{rmap.get(_s)}; if(ArrayUtils.contains(multiArgs,_s)){ argType = new Class[]{List.class}; } if(StringUtils.equals(_s, "exists")){ argType = new Class[]{Boolean.class}; } if(StringUtils.equals(_s, "type") || StringUtils.equals(_s, "size")) { argType = new Class[]{Integer.class}; } criteria = (Criteria) Reflections.invokeMethod(criteria,op,argType,args); listC.add(criteria); } } if(listC.size() > 0){ Criteria [] cs = new Criteria[listC.size()]; c.andOperator(listC.toArray(cs)); } return c; }
调用createCriteria
public Pager findPagerByMap(Pager pager , Map<String,Map<String,Object>> smap){ Criteria criteria = createCriteria(smap); Query query = new Query(criteria); return findPage(pager,query); }
测试用例
public void testQuery(){ Pager pager = new Pager(); Map<String,Object> rmap = new HashMap<String,Object>(); rmap.put("methodName","maintain"); rmap.put("host","localhost:8080"); Map<String,Map<String,Object>> smap = Maps.newHashMap(); smap.put("is",rmap); rmap = new HashMap<String, Object>(); rmap.put("createDate",new Date()); smap.put("lt",rmap); pager = logService.findPagerByMap(pager,smap); List<Log> logs = (List<Log>) pager.getList(); }
欢迎加入193826252讨论
实现代码地址https://git.oschina.net/xForMe/fast_redis.git
相关文章推荐
- win7+mongodb
- Windows安装MongoDB
- java MongoDB查询(一)简单查询
- Mongodb安装搭建Replica Set+Sharding集群
- Mongodb安装搭建Replica Set+Sharding集群
- MongoDB基本使用
- MongoDB学习笔记~官方驱动的原生Curd操作
- MongoDB误操作后的point in time recovery
- MongoDB误操作后的point in time recovery
- mongodb 备份和恢复
- php简单查询mongoDB
- Elasticsearch、MongoDB和Hadoop比较
- mongodb调研
- MongoDB与内存
- MongoDB用户的增加、删除以及权限的读写、只读
- mongodb journal文件格式(不错)
- mongodb持久化(不错)
- mongodb源码分析
- MongoDB副本集安全验证
- python如何实现excel数据添加到mongodb