热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring与MongoDB的集成

1.先上配置文件:?xmlversion1.0encodingUTF-8?beansxmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://

1.先上配置文件:


        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cOntext="http://www.springframework.org/schema/context"
        xmlns:mOngo="http://www.springframework.org/schema/data/mongo"
        xsi:schemaLocation="http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
        
        


2.我实际上没用配置文件进行注入,再上配置类:

package com.licl;
import java.net.UnknownHostException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import com.mongodb.Mongo;
@Configuration
public class Config {
        public @Bean
        MongoOperations abc() throws UnknownHostException {
                return new MongoTemplate(new SimpleMongoDbFactory(new Mongo(),
                                "test"));
        }
}

3.再上一下单元测试类,注释中是JAVA对应的MONGO语句

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.mapreduce.GroupBy;
import org.springframework.data.mongodb.core.mapreduce.GroupByResults;
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Order;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.licl.Card;
import com.licl.Ebitem;
import com.licl.Para;
import com.licl.Person;
import com.mongodb.WriteResult;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml" })
public class MongoTest {
        private static final Log log = LogFactory.getLog(MongoTest.class);
        @Autowired
        MongoOperations mongoOps;
        @Test
        public void testInsert() {
                Person p = new Person("Joe", 34);
                List list = new ArrayList();
                Card card = new Card();
                card.setMoney(1000);
                card.setName("招商银行");
                Card card2 = new Card();
                card2.setMoney(2000);
                card2.setName("交通银行");
                Card card3 = new Card();
                card3.setMoney(3000);
                card3.setName("工商银行");
                list.add(card);
                list.add(card2);
                list.add(card3);
                p.setCard(list);
                mongoOps.insert(p);
                log.info("Insert: " + p);
        }
        // There was implicit conversion using the MongoConverter between a String
        // and ObjectId as stored in the database and recognizing a convention of
        // the property "Id" name.
        @Test
        public void testFindById() {
                Person p1 = new Person("Joe", 34);
                p1.setPid("123");
                mongoOps.insert(p1);
                Person p = mongoOps.findById(p1.getPid(), Person.class);
                log.info("Found: " + p);
        }
        // db.person.find({"card":{"$all":["jiaotong","gongshang"]}})
        @Test
        public void testAll() {
                List list = mongoOps.find(Query.query(Criteria.where("card")
                                .all("gongshang", "jiaotong")), Person.class);
                for (Person p : list) {
                        log.info("Found: " + p);
                }
        }
        // {"$or":[{"name":{"$exsits":"true"}},{"name":{"$exsits":"false"}}]}
        @Test
        public void testorOperator() {
                List list = mongoOps.find(Query.query(new Criteria()
                                .orOperator(Criteria.where("name").exists(true), Criteria
                                                .where("name").exists(false))), Person.class);
                for (Person p : list) {
                        log.info("Found: " + p);
                }
        }
        // {"name":1,"age":1}
        @Test
        public void testAnd() {
                List list = mongoOps.find(
                                Query.query(Criteria.where("name").exists(true).and("age")
                                                .exists(true)), Person.class);
                for (Person p : list) {
                        log.info("Found: " + p);
                }
        }
        @Test
        // db.person.find({"card":{"$elemMatch":{"$in":["jiaotong"]}}});
        public void testelemMatchIn() {
                List list = mongoOps.find(
                                Query.query(Criteria.where("card").elemMatch(
                                                new Criteria().in("zhaoshang"))), Person.class);
                for (Person p : list) {
                        log.info("Found: " + p);
                }
        }
        // db.person.update({"name":"Joe","card.name":"招商银行"},{"$inc":{"card.$.money":1000}});
        @Test
        public void testUpdate() {
                WriteResult wr = mongoOps.updateMulti(
                                Query.query(Criteria.where("name").in("Joe").and("card.name")
                                                .in("招商银行")), new Update().inc("card.$.money", 11000),
                                Person.class);
                log.info(wr.getLastError());
        }
        @Test
        public void testUpdateAddtoSet() {
                Card card = new Card();
                card.setMoney(1000);
                card.setName("??I?行");
                WriteResult wr = mongoOps.updateMulti(
                                Query.query(Criteria.where("name").in("Joe").and("card.name")
                                                .in("招商银行")), new Update().addToSet("card", card),
                                Person.class);
                log.info(wr.getLastError());
        }
        @Test
        public void testUpdateFirst() {
                mongoOps.updateFirst(Query.query(Criteria.where("name").is("Joe")),
                                Update.update("age", 35), Person.class);
        }
        @Test
        public void testQuery() {
                Person p = mongoOps.findOne(
                                Query.query(Criteria.where("name").is("Joe")), Person.class);
                log.info("Found: " + p);
                List people = mongoOps.findAll(Person.class);
                log.info("Number of people = : " + people.size());
        }
        @Test
        public void testFindAndModify() {
                Person p = mongoOps.findAndModify(Query.query(Criteria.where("name")
                                .is("Joe")), Update.update("age", 125),
                                new FindAndModifyOptions().returnNew(true).upsert(true),
                                Person.class);
                log.info("Found: " + p);
        }
        public void testDelete() {
                Person p = new Person("Joe", 34);
                mongoOps.remove(p);
        }
        public void testdropCollection() {
                mongoOps.dropCollection(Person.class);
        }
        Random r = new Random();
        // db.test.find({ "map" : { "颜色" : "白色" , "内存" : "24G" , "地域" : "美国" ,
        // "操作系统" : "IOS"}}).exlain();
        @Test
        public void testquery() {
                long begin = System.currentTimeMillis();
                for (int i = 0; i < 1000; i++) {
                        List listp = new ArrayList();
                        listp.add(new Para("颜色", list.get(r.nextInt(4))));
                        listp.add(new Para("内存", list2.get(r.nextInt(4))));
                        listp.add(new Para("操作系统", list3.get(r.nextInt(3))));
                        listp.add(new Para("地域", list4.get(r.nextInt(3))));
                        Query q = Query.query(Criteria.where("list").all(listp))
                                        .with(new Sort(new Sort.Order(Direction.ASC, "item_id")))
                                        .limit(20);
                        List Ebitemlist = mongoOps.find(q, Ebitem.class);
                        log.info("doQuery:" + i);
                }
                long end = System.currentTimeMillis();
                log.info("time: " + (end - begin));
        }
        // db.ebitem.find({"list":{"$all":[{"key":"内存","value":"16G"},{"key":"颜色","value":"白色"}]}});
        @Test
        public void testInsertItem() {
                long begin = System.currentTimeMillis();
                for (int i = 0; i < 100000; i++) {
                        Ebitem item = new Ebitem();
                        item.setItem_id(Long.valueOf(i));
                        item.setItemName("itemName***" + i);
                        List listp = new ArrayList();
                        listp.add(new Para("颜色", list.get(r.nextInt(4))));
                        listp.add(new Para("内存", list2.get(r.nextInt(4))));
                        listp.add(new Para("操作系统", list3.get(r.nextInt(3))));
                        listp.add(new Para("地域", list4.get(r.nextInt(3))));
                        item.setList(listp);
                        mongoOps.insert(item);
                        log.info("Insert: " + item.getItem_id());
                }
                long end = System.currentTimeMillis();
                log.info("time: " + (end - begin));
        }
        @Test
        public void mapreduce() {
                Map map2 = new HashMap();
                map2.put("color", "白色");
                String map = "function() {var arr=this.list;for(var i=0;i                 String reduece = "function (key, values) {var a={颜色:color,count:0};values.forEach(function(v){a.count+=v.count});return a;}";
                MapReduceResults r1 = mongoOps.mapReduce("ebitem", map,
                                reduece, MapReduceOptions.options().scopeVariables(map2)
                                                .outputCollection("mapreduce"), Ebitem.class);
                log.info("time: " + r1);
        }
        @Test
        public void group() {
                Map map2 = new HashMap();
                map2.put("color", "白色");
                Para p = new Para("颜色", "白色");
                GroupByResults r1 = mongoOps.group(
                                Criteria.where("list").is(p), "ebitem", GroupBy.key("list.1")
                                                .initialDocument("{count:0,sum:0}").reduceFunction("function(doc,prev){prev.count++;prev.sum+=doc._id}").finalizeFunction("function(prev){prev.sum=prev.sum/prev.count}"), Ebitem.class);
                log.info("time: "+r1.getRawResults());
        }
        @Before
        public void before() {
                list.add("黑色");
                list.add("白色");
                list.add("红色");
                list.add("绿色");
                list2.add("8G");
                list2.add("16G");
                list2.add("24G");
                list2.add("32G");
                list3.add("安卓");
                list3.add("IOS");
                list3.add("塞班");
                list4.add("中国");
                list4.add("日本");
                list4.add("美国");
        }
        List list = new ArrayList();
        List list2 = new ArrayList();
        List list3 = new ArrayList();
        List list4 = new ArrayList();
}
 几个实体类应该算是相当简单的结构

PS:我个人还是非常喜欢MONGODB的,期待他和HADOOP集群进行整合,效果会非常好。但是这东西有些门槛,企业招人不容易。


推荐阅读
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
  • Zookeeper为分布式环境提供灵活的协调基础架构。ZooKeeper框架支持许多当今最好的工业应用程序。我们将在本章中讨论ZooKeeper的一些最显着的应用。雅虎ZooKee ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
author-avatar
mobiledu2502868793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有