`

Spring for Mongodb

阅读更多

安装Spring for Mongodb

Spring项目为方便对Mongodb的操作,建立了spring-data的子项目,地址在:

http://www.springsource.org/spring-data/mongodb,目前版本是1.0.0M2阶段,已支持对 Mongodb的一系列基本操作。我们先从http://www.springsource.org/spring-data/mongodb中下载相关 的包:spring-data-document-1.0.0.M2.zip,下载解压后,将解压后的四个JAR文件放到工程路径的lib库中,本文中还 将使用Spring 3.0.4的版本,请读者自行下载配置。

Spring Mongodb的配置

目前,可以有两种方式对Spring mongodb进行配置。第一种是使用Spring 3中的注解,另外一种是使用传统的XML配置。下面分别进行讲解:

使用Spring 3中的注解

首先在配置类中,要继承AbstractMongoConfiguration类,代码如下:

[java] view plaincopy
 
  1. packagecom.mkyong.config;  
  2.  importorg.springframework.context.annotation.Bean;  
  3.  importorg.springframework.context.annotation.Configuration;  
  4.  importorg.springframework.data.document.mongodb.MongoTemplate;  
  5.  importorg.springframework.data.document.mongodb.config.AbstractMongoConfiguration;  
  6.  importcom.mongodb.Mongo;  
  7.  /** 
  8.  * Spring MongoDB configuration file 
  9.  *  
  10. */  
  11.  @Configuration  
  12.  publicclassSpringMongoConfig extendsAbstractMongoConfiguration {  
  13.      @Override  
  14.      public@Bean Mongo mongo() throwsException {  
  15.          returnnewMongo("localhost");  
  16.      }  
  17.      @Override  
  18.      public@Bean MongoTemplate mongoTemplate() throwsException {  
  19.          returnnewMongoTemplate(mongo(),"yourdb","yourCollection");  
  20.      }  
  21.  }  

这里,引入了MongoTemplate模版类,并且使用对连接数据库的地址,数据库名和collection进行了初始化。

在调用Spring Mongodb配置时,只需要在需要使用的类中调用AnnotationConfigApplicationContext,传入刚才配置好的SpringMongoConfig类即可。如下代码所示:

  ApplicationContext
ctx =newAnnotationConfigApplicationContext(SpringMongoConfig.class);
MongoOperations
mongoOperation =(MongoOperations)ctx.getBean("mongoTemplate");

当获得了mongoOperation对象的实例后,即可进行对mongodb的相关操作。

使用XML配置文件

使用XML配置文件的方法如下:

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.  <beans xmlns="http://www.springframework.org/schema/beans"  
  3.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.      xmlns:context="http://www.springframework.org/schema/context"  
  5.      xmlns:mongo="http://www.springframework.org/schema/data/mongo"  
  6.      xsi:schemaLocation="http://www.springframework.org/schema/context  
  7.            http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  8.            http://www.springframework.org/schema/data/mongo  
  9.            http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd  
  10.            http://www.springframework.org/schema/beans  
  11.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  12.      <!--Default bean name is 'mongo' -->  
  13.      <mongo:mongo host="localhost"port="27017"/>  
  14.      <bean id="mongoTemplate"  
  15.                   class="org.springframework.data.document.mongodb.MongoTemplate">  
  16.          <constructor-arg ref="mongo"/>  
  17.          <constructor-arg name="databaseName"value="yourdb"/>  
  18.          <constructor-arg name="defaultCollectionName"value="yourCollection"/>  
  19.      </bean>  
  20.      <!--To translate any MongoExceptions thrown in @Repository annotated classes -->  
  21.      <context:annotation-config />  
  22.  </beans>  

注意这里引用相关的命名空间xmlns:mongo="http://www.springframework.org/schema/data/mongo"
,并且在名为mongoTemplate中注入相关的数据库地址,数据库名即可,使用方法如下:

ApplicationContext ctx =newGenericXmlApplicationContext("mongo-config.xml");

使用Spring Mongodb实现增删改查操作

下面通过实例讲解如何使用Spring Mongodb实现增删改查操作,假设我们现在有一个实

体类user如下:

[java] view plaincopy
 
  1. packagecom.mkyong.user;  
  2.  publicclassUser {  
  3.  privateString id;  
  4.  privateString firstname;  
  5.  privateString lastname;  
  6.  privateintage;  
  7.  //getter and setter methods   
  8. }  

接下来,我们看具体的操作代码,如下,这里假设要将user类保存到名为userprofile的数据集中。

[java] view plaincopy
 
  1. packagecom.mkyong.core;  
  2.    
  3. importjava.util.List;  
  4.    
  5. importorg.springframework.context.ApplicationContext;  
  6.  importorg.springframework.context.annotation.AnnotationConfigApplicationContext;  
  7.  importorg.springframework.context.support.GenericXmlApplicationContext;  
  8.  importorg.springframework.data.document.mongodb.MongoOperations;  
  9.  importorg.springframework.data.document.mongodb.query.Criteria;  
  10.  importorg.springframework.data.document.mongodb.query.Query;  
  11.  importorg.springframework.data.document.mongodb.query.Update;  
  12.  importcom.mkyong.config.SpringMongoConfig;  
  13.  importcom.mkyong.user.User;  
  14.  publicclassApp  
  15.  {  
  16.  publicstaticvoidmain( String[] args )  
  17.  {  
  18.  ApplicationContext ctx =newAnnotationConfigApplicationContext(SpringMongoConfig.class);  
  19.  MongoOperations mongoOperation =(MongoOperations)ctx.getBean("mongoTemplate");  
  20.  User user =newUser("1001""yong""mook kim"30);  
  21.  //保存  
  22.  mongoOperation.save("userprofile",user);  
  23.  //查找  
  24.  User savedUser =mongoOperation.findOne("userprofile",  
  25.  newQuery(Criteria.where("id").is("1001")),  
  26.  User.class);  
  27.  System.out.println("savedUser : "+savedUser);  
  28.  //更新  
  29.  mongoOperation.updateFirst("userprofile",  
  30.  newQuery(Criteria.where("firstname").is("yong")),   
  31. Update.update("lastname""new lastname"));  
  32.  User updatedUser =mongoOperation.findOne("userprofile",  
  33.  newQuery(Criteria.where("id").is("1001")),  
  34.  User.class);  
  35.  System.out.println("updatedUser : "+updatedUser);  
  36.  //删除  
  37.  mongoOperation.remove("userprofile",  
  38.  newQuery(Criteria.where("id").is("1001")),  
  39.  User.class);  
  40.  //显示当前列表  
  41.  List<User>listUser =  
  42.  mongoOperation.getCollection("userprofile", User.class);  
  43.  System.out.println("Number of user = "+listUser.size());  
  44.  }  
  45.  }  

输出结果如下:

savedUser : User [id=1001, firstname=yong, lastname=mook kim, age=30]
updatedUser : User [id=1001, firstname=yong, lastname=newlastname, age=30]
Number of user =

Spring mongodb插入数据

下面详细讲解如何使用spring mongodb插入数据。在spring mongodb中,插入数据到

mongodb有如下几种方法:

[java] view plaincopy
 
  1. User user =newUser("...");  
  2.  //将user对象保存到"user"这个collection中  
  3.  mongoOperation.save(user);  
  4.  //将user对象保存到"new collection"这个collection中  
  5.  mongoOperation.save("new collection",user);  
  6.  //将user对象保存到"user"这个collection中  
  7.  mongoOperation.insert(user);  
  8.  //将user对象保存到"new collection"这个collection中  
  9.  mongoOperation.insert("new collection", user);  
  10.  //将user的对象列表(List)保存到"user"collection中去  
  11.  mongoOperation.insertList(userInList);  
  12.  //将user的对象列表(List)保存到"new collection"collection中去  
  13.  mongoOperation.insertList("new collection", userInList);   

要注意的是,Spring mongodb中,当没有指定collection时,就会把对象保存到以对象命名的collection中。比如上例中的 mongoOperation.insert(user),由于没指定collection的名称,所以会把user对象保存到user这个新建立的 collection中。

另外请注意其中的save和insert的区别。它们的区别为:

1)save意思是,当记录不存在时插入,或者是当记录已存在是更新,实际上就是saveorupdate的意思。

2) insert的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。

下面举例子说明:

[java] view plaincopy
 
  1. packagecom.mkyong.core;  
  2.  importjava.util.ArrayList;  
  3.  importjava.util.List;  
  4.  importorg.springframework.context.ApplicationContext;  
  5.  importorg.springframework.context.annotation.AnnotationConfigApplicationContext;  
  6.  importorg.springframework.data.document.mongodb.MongoOperations;  
  7.  importorg.springframework.data.document.mongodb.query.Criteria;  
  8.  importorg.springframework.data.document.mongodb.query.Query;  
  9.  importcom.mkyong.config.SpringMongoConfig;  
  10.  importcom.mkyong.user.User;  
  11.  publicclassApp {  
  12.  publicstaticvoidmain(String[] args) {  
  13.  ApplicationContext ctx =newAnnotationConfigApplicationContext(  
  14.  SpringMongoConfig.class);  
  15.  MongoOperations mongoOperation =(MongoOperations) ctx  
  16.  .getBean("mongoTemplate");  
  17.  //新增一个user对象,并把它放到"ABC"这个collection中  
  18.  System.out.println("Case 1...");  
  19.  User userA =newUser("1111""user""A"99);  
  20.  mongoOperation.save("ABC", userA);  
  21.  //查找刚插入的user对象  
  22.  User userA1 =mongoOperation.findOne("ABC",  
  23.  newQuery(Criteria.where("id").is("1111")), User.class);  
  24.  System.out.println(userA1);  
  25.  //插入新的user,放到userB这个collection中去  
  26.  System.out.println("Case 2...");  
  27.  User userB =newUser("2222""user""B"99);  
  28.  mongoOperation.save(userB);  
  29.  //查找  
  30.  User userB1 =mongoOperation.findOne(  
  31.  newQuery(Criteria.where("id").is("2222")), User.class);  
  32.  System.out.println(userB1);  
  33.  //插入对象列表,放到arraylist中  
  34.  System.out.println("Case 3...");  
  35.  User userC =newUser("3333""user""C"99);  
  36.  User userD =newUser("4444""user""D"99);  
  37.  User userE =newUser("5555""user""E"99);  
  38.  List<User>userList =newArrayList<User>();  
  39.  userList.add(userC);  
  40.  userList.add(userD);  
  41.  userList.add(userE);  
  42.  mongoOperation.insertList("ABC-List", userList);  
  43.  List<User>users =mongoOperation.find("ABC-List", newQuery(Criteria  
  44.  .where("firstname").is("user")), User.class);  
  45.  for(User temp : users) {  
  46.  System.out.println(temp);  
  47.  }  
  48.  }  
  49.  }  

输出结果如下:

Case 1...
User [id=1111, firstname=user, lastname=A, age=99]
Case 2...
User [id=2222, firstname=user, lastname=B, age=99]
Case 3...
User [id=3333, firstname=user, lastname=C, age=99]
User [id=4444, firstname=user, lastname=D, age=99]
User [id=5555, firstname=user, lastname=E, age=99]

更新Document

在mongodb中,可以使用save,updateFirst(),updateMulti()方法来进行更新,下面

是相关的例子

[java] view plaincopy
 
  1. publicclassApp {  
  2.  publicstaticvoidmain(String[] args) {  
  3.  ApplicationContext ctx =newAnnotationConfigApplicationContext(  
  4.  SpringMongoConfig.class);  
  5.  MongoOperations mongoOperation =(MongoOperations) ctx  
  6.  .getBean("mongoTemplate");  
  7.  User user =newUser("1000""user-first""user-last"17);  
  8.  System.out.println("Case 1...by save()");  
  9.  mongoOperation.save(user);  
  10.  User userPrint1 =mongoOperation.findOne(newQuery(Criteria.where("id").is("1000")), User.class);  
  11.  System.out.println(userPrint1);  
  12.  //修改user对象的lastname  
  13.  user.setLastname("new last name");  
  14.  //更新user对象  
  15.  mongoOperation.save(user);  
  16.  User userPrint2 =mongoOperation.findOne(newQuery(Criteria.where("id")  
  17.  .is("1000")), User.class);  
  18.  System.out.println(userPrint2);  
  19.  //Case 2 ... update firstname field, $set  
  20.  System.out.println("Case 2...by updateFirst() - $set");  
  21.  //将id为1000的user对象的firstname属性的值更新为”new firstname”  
  22.  mongoOperation.updateFirst("user",  
  23.  newQuery(Criteria.where("_id").is("1000")),  
  24.  Update.update("firstname""new first name"));  
  25.  User userPrint3 =mongoOperation.findOne(newQuery(Criteria.where("id")  
  26.  .is("1000")), User.class);  
  27.  System.out.println(userPrint3);  
  28.  //对id为1000的user的age加上10  
  29.  System.out.println("Case 3...by updateFirst() - $inc");  
  30.  Update updateAge =newUpdate();  
  31.  updateAge.inc("age"10);  
  32.  mongoOperation.updateFirst("user",  
  33.  newQuery(Criteria.where("_id").is("1000")), updateAge);  
  34.  User userPrint4 =mongoOperation.findOne(newQuery(Criteria  
  35.  .where("_id").is("1000")), User.class);  
  36.  System.out.println(userPrint4);  
  37.  }  
  38.  }  

结果为:

Case 1...by save()
User [id=1000, firstname=user-first, lastname=user-last, age=17]
User [id=1000, firstname=user-first, lastname=newlast name, age=17]
Case 2...by updateFirst()-$set
User [id=1000, firstname=newfirst name, lastname=newlast name, age=17]
Case 3...by updateFirst()-$inc
User [id=1000, firstname=newfirst name, lastname=newlast name, age=27]

 

此外,还支持使用updateMulti,updateMulti是将所有的对象进行更新,比如:

mongoOperation.updateMulti("user",
newQuery(Criteria.where("firstname").is("yong")),
Update.update("age",40));

表示将所有firstname为yong的user对象的age属性全部更新为40。

查询Document

在spring mongodb中,可以使用findOne(),find()和getCollection()去查询mongodb,常见的用法如下:

[java] view plaincopy
 
  1. User user =newUser("...");  
  2.  //找到第一个id=1001的user对象  
  3.  User user =mongoOperation.findOne("test", newQuery(Criteria  
  4.  .where("id").is("1001")), User.class);  
  5.  //从test集合中获得所有id<=1000并且age=21的user对象  
  6.  List<User>users =mongoOperation.find("test", newQuery(Criteria  
  7.  .where("id").lte("2001").and("age").is(21)), User.class);  
  8.  //从test 集合中获得所有的user对象列表  
  9.  List<User>users =mongoOperation.getCollection("test", User.class);   

删除document

在spring mongodb中, 删除document使用remove方法,示例如下:

 

[java] view plaincopy
 
  1.  User user =newUser("...");  
  2.  //删除user集合中的user对象  
  3.  mongoOperation.remove(user);  
  4.  //删除test集合下的id=2的user对象   
  5. mongoOperation.remove("test", newQuery(Criteria  
  6.  .where("id").is("2")));  
  7.  //删除test集合下的,id=3的user对象,最后并且返回这个被删除的对象  
  8.  User deletedUser =mongoOperation.findAndRemove("test",  
  9.  newQuery(Criteria.where("id").is("3")), User.class);  
分享到:
评论

相关推荐

    Java Spring-data for mongodb

    《Java Spring-data for MongoDB:深度解析与应用实践》 在当今大数据时代,MongoDB作为一款非关系型数据库,因其灵活性和高性能受到了广泛的关注。而Java Spring-data框架则为开发人员提供了一种简单、高效的方式...

    mongodb整合spring文档

    ### Spring 整合 MongoDB 数据库配置详解 #### 一、前言 在现代软件开发过程中,集成NoSQL数据库如MongoDB已成为一种趋势,特别是在需要处理大量非结构化数据的应用场景中。Spring框架作为Java领域中非常流行的...

    用MongoDB和Spring_Data创建Java应用

    Spring Data for MongoDB是Spring Data项目的一个分支,专为MongoDB设计,旨在降低开发人员使用MongoDB的门槛。通过Spring Data for MongoDB,开发者可以利用熟悉的Spring框架进行MongoDB的操作,无需深入了解底层的...

    spring集成mongodb

    在 Java 开发中,Spring 与 MongoDB 的集成使得开发者能够充分利用两者的优点,构建高效、灵活的数据驱动应用。 本文将详细介绍如何在 Spring 4.2 中集成 MongoDB 框架,特别是使用 Morphia 1.1 这个 ORM(对象关系...

    geojson-spring-data:Spring Data MongoDB 的 GeoJSON 支持类

    支持 Spring Data for MongoDB 中的 GeoJSON 类 目前 Spring Data for MongoDB 支持地理空间几何,但它们不使用 GeoJSON 表示。 此外,并非 GeoJSON 涵盖的所有几何图形都默认包含在 Spring Data 中。 该库为 ...

    使用Java基于MongoDB和SpringData应用中文最新版本

    Spring Data for MongoDB提供了很多特性,它使很多MongoDB的Java开发者解放了很多。MongoTemplate helper类支持通用的Mongo操作。它整合了文档和POJO之间的对象映射。通常,他会转换数据库访问异常到Spring中的异常...

    javasnmp源码-spring-data-mongodb-demo:SpringDataMongoDB4.0事务

    探索使用Spring5和MongoDB4.0,如何开启事务 背景 最近项目中用到了Nosql数据库mongodb和SpringMVC框架。随着项目的深入,遇到了一些困难,于是把这些困难的解决记录下来,希望以后能帮助到其他人。 技术介绍 Spring...

    Spring-data-mongo应用

    本案例主要介绍了如何在 Spring 4.1.3.RELEASE 版本下集成 MongoDB,并通过 Spring Data MongoDB 1.8.0 进行简单的数据操作。 #### 二、环境准备 - **Spring版本**:4.1.3.RELEASE - **Spring Data MongoDB版本**...

    mongodb+spring+maven环境搭建

    -- Spring Data for MongoDB --&gt; &lt;groupId&gt;org.springframework.data &lt;artifactId&gt;spring-data-mongodb 版本号 &lt;!-- Spring MVC --&gt; &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-webmvc 版本号 ...

    使用Java基于MongoDB和SpringData应用.docx

    Spring Data for MongoDB 是 Spring Framework 的一个模块,它为开发人员提供了一种简单的方式来与 MongoDB 进行交互。它提供了一个面向 Spring 的编程模型,简化了 MongoDB 的集成,使得 Java 开发者可以更轻松地...

    springcloud3.3.1 Thymeleaf

    springcloud3.3.1 Thymeleaf Lombok Spring Boot DevTools Spring Web Spring Session Spring Security Spring Data MongoDB Spring for RabbitMQ Spring Shell

    springboot整合mongodb详解

    在SpringBoot项目中整合MongoDB,首先需要在`pom.xml`中添加MongoDB的相关依赖,包括`spring-boot-starter-data-mongodb`,确保项目可以使用MongoDB的相关功能。 ```xml &lt;groupId&gt;org.springframework.boot ...

    Mongodb数据库JAVA操作例子

    如果你的应用是基于Spring框架的,可以使用Spring Data MongoDB简化操作。只需在配置文件中声明MongoDB的相关设置,并创建Repository接口,即可实现CRUD操作。 8. **事务处理 (Transactions)** 自MongoDB 4.0开始...

    Spring Data:Spring Data Modern Data Access for Enterprise Java

    11. Spring for Apache Hadoop 12. Analyzing Data with Hadoop . 13. Creating Big Data Pipelines with Spring Batch and Spring Integration Part VI. Data Grids 14. GemFire: A Distributed Data Grid ...

    Pro MongoDB Development [2016]

    and transferring data between Oracle and MongoDB * How to use Kundera, Spring Data, and Spring XD with MongoDB * How to load MongoDB data into Oracle Database and integrating MongoDB with Oracle ...

    mongoDB.rar

    安装好mongoDB,代码导入Eclipse,通过启动类DemoApplication启动Spring.在浏览器中依次输入http://localhost:8090/save 和 http://localhost:8090/select也可以通过robo3t直接查询数据库看存入数据

    java连接mongodb.zip

    同时,为了提高代码的可读性和可维护性,可以使用Spring Data MongoDB这样的高级框架,它提供了更简洁的API和自动配置功能。 总之,Java连接MongoDB涉及的主要知识点包括MongoDB的Java驱动程序使用、数据库和集合...

    springboot+mongodb 实现按日期分组分页查询功能

    Spring Boot + MongoDB 实现日期分组分页查询功能 Spring Boot 是一个基于 Java 的开源框架,旨在简化 Spring 应用程序的开发过程,而 MongoDB 是一个基于分布式文件存储的 NoSQL 数据库,常用于大数据存储和处理...

    MongoDB测试javaweb项目demo

    本项目"MongoDB测试javaweb项目demo"应该包含了以上所述的MongoDB与Java Web集成的关键步骤,包括连接配置、数据操作以及可能的Spring Data MongoDB使用。通过深入研究这个项目,开发者可以学习到如何在实际项目中...

Global site tag (gtag.js) - Google Analytics