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

spring-data-MongoDB的MongoTemplate使用实例代码演示

1、首先使用Eclipse的git插件把spring提供的示例下载下来https://github.com/SpringSource/spring-data-document-examples.git下载之后导入maven工程2、首先看我们的domain定义,也就是entity。org.springframework.

1、首先使用Eclipse的git插件把spring提供的示例下载下来

https://github.com/SpringSource/spring-data-document-examples.git

下载之后导入maven工程





2、首先看我们的domain定义,也就是entity。

org.springframework.data.mongodb.examples.hello.domain.Person

package org.springframework.data.mongodb.examples.hello.domain;
import java.util.ArrayList;
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.document.mongodb.mapping.Document;
@Document
public class Person {
        @Id
        private String id;
        private String name;
        private int age;
        private List accounts = new ArrayList();
        public Person() {
        }
        public Person(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        public String getId() {
                return id;
        }
        public void setId(String id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public List getAccounts() {
                return accounts;
        }
        public void addAccount(Account account) {
                this.accounts.add(account);
        }
        public void setAccounts(List accounts) {
                this.accounts = accounts;
        }
        public String toString() {
                return "Person [id=" + id + ", name=" + name + ", age=" + age
                                + ", accounts=" + accounts + "]";
        }
}
dao层的类org.springframework.data.mongodb.examples.hello.HelloMongo
package org.springframework.data.mongodb.examples.hello;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import org.springframework.beans.factory.annotation.Autowired;
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;
import org.springframework.data.mongodb.examples.hello.domain.Account;
import org.springframework.data.mongodb.examples.hello.domain.Person;
import org.springframework.stereotype.Repository;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
/**
 *
 *  @author xiaofancn
 *
 *      参考  http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/
 *      参考  http://nosql.mypopescu.com/post/816470307/tutorial-mongodb-in-java
 *
 */
@Repository
public class HelloMongo {
        @Autowired
        MongoOperations mongoOperations;
        public void gridFSInput(String inputFilepath) {
                DB db = mongoOperations.getCollection(
                                mongoOperations.getCollectionName(Person.class)).getDB();
                db.requestStart();
                File inputFile = new File(inputFilepath);
                GridFSInputFile gfsInput;
                try {
                        gfsInput = new GridFS(db, "fs")
                                        .createFile(inputFile);
                        gfsInput.setFilename("qq123456789logo");// 保存到数据库的文件名为qq123456789logo
                        gfsInput.save();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                db.requestDone();
        }
        public void gridFSOutput(String outputFilepath) {
                DB db = mongoOperations.getCollection(
                                mongoOperations.getCollectionName(Person.class)).getDB();
                GridFSDBFile gfsFile = new GridFS(db, "fs").findOne("qq123456789logo");// 查找文件名qq123456789logo输出保存
                try {
                        gfsFile.writeTo(outputFilepath);
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        public void insert(int count) {
                if (mongoOperations.collectionExists(Person.class)) {
                        mongoOperations.dropCollection(Person.class);
                }
                mongoOperations.createCollection(Person.class);
                for (int i = 0; i < count; i++) {
                        Person p = new Person("小樊", i);
                        Account a = new Account("1234-59873-893-1", Account.Type.SAVINGS,
                                        123.45D);
                        p.addAccount(a);
                        mongoOperations.insert(p);
                }
        }
        public void delete(int age) {
                // 删除查询到的年龄
                mongoOperations.remove(new Query(new Criteria("age").is(age)),
                                Person.class);
        }
        public void alert(int age) {
                // 根据age查询,更新查询到的age字段为随机数
                mongoOperations.updateMulti(new Query(new Criteria("age").is(age)),
                                new Update().inc("age", new Random().nextInt()), Person.class);
        }
        public void alert(String name) {
                // 根据name查询,更新查询到的name字段为xiaofancn
                mongoOperations.updateMulti(new Query(new Criteria("name").in(name)),
                                new Update().set("name", "xiaofancn"), Person.class);
        }
        public void query(int age) {
                // 根据age查询
                List persons = mongoOperations.find(new Query(new Criteria(
                                "age").is(age)), Person.class);
                for (Person p : persons) {
                        System.out.println(p.toString());
                }
                // ===========================jdbc原生的类
                DBCollection personColl = mongoOperations.getCollection(mongoOperations
                                .getCollectionName(Person.class));
                BasicDBObject parameter = new BasicDBObject();
                parameter.put("age", age);
                DBCursor item = personColl.find(parameter);
                while (item.hasNext()) {
                        System.out.println(item.next());
                }
        }
        /**
         * 统计这个年龄的人数
         * @param age
         * @return
         */
        public Long count(int age) {
                DBCollection personColl = mongoOperations.getCollection(mongoOperations
                                .getCollectionName(Person.class));
                BasicDBObject parameter = new BasicDBObject();
                parameter.put("age", age);
                return personColl.count(parameter);
        }
        public void showAllOrederByAge(int startPage, DBObject sort,
                        int countPerPage) {
                if (sort == null) {// 默认按照年龄的升序
                        sort = BasicDBObjectBuilder.start().add("age", 1).get();
                }
                DBCollection personColl = mongoOperations.getCollection(mongoOperations
                                .getCollectionName(Person.class));
                DBCursor item = personColl.find().sort(sort)
                                .skip((startPage-1) * countPerPage).limit(countPerPage);
                while (item.hasNext()) {
                        // Person p = item.next();错误
                        DBObject parameter = item.next();
                        System.out.println(parameter);
                }
        }
        public void showAll() {
                List list = mongoOperations.findAll(Person.class);
                for (Person p : list) {
                        System.out.println(p);
                }
                // =================大批量的查询尽量使用原生的函数,也要对应原生的文档结构。
                DBObject sort = BasicDBObjectBuilder.start().add("age", -1).get();
                DBCollection personColl = mongoOperations.getCollection(mongoOperations
                                .getCollectionName(Person.class));
                DBCursor item = personColl.find();// 查询前100条记录
                while (item.hasNext()) {
                        // Person p = item.next();错误
                        DBObject parameter = item.next();
                        System.out.println(parameter);
                }
        }
}
// 参考 http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations
                // 对数组对象有效,数组对象后添加数据
                mongoOperations.updateMulti(new Query(new Criteria("age").is(0)),
                new Update().push("name", "小樊"), Person.class);
                //找到数据,加法属性 age = age +-10
                 mongoOperations
                 .updateMulti(new Query(new Criteria("age").is(0)), new Update().inc("age", -10), Person.class);
                //unset 重置属性值,数字为0,字符其他为null
                mongoOperations.updateMulti(new Query(new Criteria("age").is(0)),
                new Update().set("name", "小樊").set("age", -1), Person.class);
客户端org.springframework.data.mongodb.examples.hello.App
package org.springframework.data.mongodb.examples.hello;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * Hello Mongo!
 */
public class App {
        public static void main(String[] args) {
                System.out.println("Bootstrapping HelloMongo");
                ConfigurableApplicationContext context = null;
                // use @Configuration using Java:
                context = new ClassPathXmlApplicationContext(
                                "META-INF/spring/bootstrap.xml");
                // use XML application context:
                // context = new
                // ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
                HelloMongo hello = context.getBean(HelloMongo.class);
                hello.delete(39);
                hello.query(39);
                //hello.showAll();
                System.out.println("DONE!");
        }
}

参考

http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/


推荐阅读
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了如何在 MongoDB 中使用正则表达式进行数据排除查询,特别关注了通过 $regex 和 $nin 操作符来过滤特定模式的数据。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
author-avatar
红枫1983_1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有