文档章节

spring mongodb 查询封装

OSC屠夫
 OSC屠夫
发布于 2015/07/31 14:47
字数 355
阅读 219
收藏 7

通过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 **

© 著作权归作者所有

OSC屠夫
粉丝 11
博文 33
码字总数 8631
作品 0
浦东
程序员
私信 提问
MongoDB —— 使用Spring Data MongoDB操作数据库

本文代码示例参见:https://gitee.com/imlichao/MongoDB-example 我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/do...

哼_哼
01/10
5.7K
0
Spring boot中mongodb的使用

mongodb的增删改查 Spring Boot对各种流行的数据源都进行了封装,当然也包括了mongodb,下面给大家介绍如何在spring boot中使用mongodb: 1、pom包配置 pom包里面添加spring-boot-starter-dat...

glen_xu
2018/06/11
238
0
MongoDB高级查询[聚合]

因为最近测试MongoDB,也算是熟悉了MongoDB吧。MongoDB还算简单,在短短一周我就掌握了很多内容。相对于其他数据库这个确实容易多了。 我安装的: MongoDB版本为:2.0.8 系统为:64位Ubuntu ...

震秦
2012/12/24
8.4K
1
spring mongodb MapReduce添加scope,scope属性为函数时无法执行.

直接上mongodb脚本(隐藏部分业务代码,保留脚本结构) 问题描述 想通过mongodb提供的MapReduce来进行数据分析,然后动态写入Collection中.以上代码脚本可以直接运行在mongodb中,但当我想用sprin...

wonailmy
08/06
47
0
spring-boot-starter-mongodb-pool

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 很多时候我们往往需要操作多个数据库(微服务架构下一个...

尹吉欢
2018/04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
8分钟前
2
0
正则表达式大全

检验手机号码 # 要求:手机号码必须为11位数字,以1开头,第二位为1或5或8。import redef verify_mobile(): mob = input("请输入手机号码:") ret = re.match(r"1[358]\d{9}", m......

彩色泡泡糖
12分钟前
2
0
QT之border-image属性

一、border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人。可惜目前支持的浏览器有限,仅Firefox3.5,chrome浏览器,Safari3+支持...

shzwork
13分钟前
2
0
Kubernetes Operator简易教程

1. 安装operator-sdk //安装 operator-sdk$ apt-get install operator-sdk.....$ operator-sdk versionoperator-sdk version: v0.7.0$ go versiongo version go1.11.4 darwin/amd64 2......

Robotcl_Blog
13分钟前
3
0
再谈DAG任务分解和Shuffle RDD

1、DagScheduler分析 DagScheduler功能主要是负责RDD的各个stage的分解和任务提交。Stage分解是从触发任务调度过程的finalStage开始倒推寻找父stage,如果父stage没有提交任务则循环提交缺失...

守望者之父
19分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部