`
jiulingchen
  • 浏览: 45079 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mongodb数据库入门之Spring Mongodb

 
阅读更多

【IT168 技术】在上一篇教程中,我们学习了如何使用Mongodb 的JAVA API对Mongodb进行相关的数据库操作,在本文中,将学习使用Spring for Mongodb去简化对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类,代码如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package com.mkyong.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.document.mongodb.MongoTemplate;
import org.springframework.data.document.mongodb.config.AbstractMongoConfiguration;
import com.mongodb.Mongo;
/**
* Spring MongoDB configuration file
*
*/
@Configuration
public class SpringMongoConfig extends AbstractMongoConfiguration {
    @Override
    
public @Bean Mongo mongo() throws Exception {
        
return new Mongo("localhost");
    }
    @Override
    
public @Bean MongoTemplate mongoTemplate() throws Exception {
        
return new MongoTemplate(mongo(),"yourdb","yourCollection");
    }
}

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

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->  ApplicationContext
ctx
= new AnnotationConfigApplicationContext(SpringMongoConfig.class);
MongoOperations
mongoOperation
= (MongoOperations)ctx.getBean("mongoTemplate");

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

  使用XML配置文件

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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"
>
    
<!-- Default bean name is 'mongo' -->
    
<mongo:mongo host="localhost" port="27017" />
    
<bean id="mongoTemplate"
                 class
="org.springframework.data.document.mongodb.MongoTemplate">
        
<constructor-arg ref="mongo" />
        
<constructor-arg name="databaseName" value="yourdb" />
        
<constructor-arg name="defaultCollectionName" value="yourCollection" />
    
</bean>
    
<!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
    
<context:annotation-config />
</beans>

 

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ApplicationContext ctx = new GenericXmlApplicationContext("mongo-config.xml");

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

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

  体类user如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package com.mkyong.user;
public class User {
private String id;
private String firstname;
private String lastname;
private int age;
//getter and setter methods
}

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package com.mkyong.core;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.data.document.mongodb.MongoOperations;
import org.springframework.data.document.mongodb.query.Criteria;
import org.springframework.data.document.mongodb.query.Query;
import org.springframework.data.document.mongodb.query.Update;
import com.mkyong.config.SpringMongoConfig;
import com.mkyong.user.User;
public class App
{
public static void main( String[] args )
{
ApplicationContext ctx
= new AnnotationConfigApplicationContext(SpringMongoConfig.class);
MongoOperations mongoOperation
= (MongoOperations)ctx.getBean("mongoTemplate");
User user
= new User("1001", "yong", "mook kim", 30);
//保存
mongoOperation.save("userprofile",user);
//查找
User savedUser = mongoOperation.findOne("userprofile",
new Query(Criteria.where("id").is("1001")),
User.
class);
System.out.println(
"savedUser : " + savedUser);
//更新
mongoOperation.updateFirst("userprofile",
new Query(Criteria.where("firstname").is("yong")),
Update.update(
"lastname", "new lastname"));
User updatedUser
= mongoOperation.findOne("userprofile",
new Query(Criteria.where("id").is("1001")),
User.
class);
System.out.println(
"updatedUser : " + updatedUser);
//删除
mongoOperation.remove("userprofile",
new Query(Criteria.where("id").is("1001")),
User.
class);
//显示当前列表
List<User> listUser =
mongoOperation.getCollection(
"userprofile", User.class);
System.out.println(
"Number of user = " + listUser.size());
}
}

 

  输出结果如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->savedUser : User [id=1001, firstname=yong, lastname=mook kim, age=30]
updatedUser : User [id
=1001, firstname=yong, lastname=new lastname, age=30]
Number of user
= 0

  Spring mongodb插入数据

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

  mongodb有如下几种方法:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->User user = new User("...");
//将user对象保存到"user"这个collection中
mongoOperation.save(user);
//将user对象保存到"new collection"这个collection中
mongoOperation.save("new collection",user);
//将user对象保存到"user"这个collection中
mongoOperation.insert(user);
//将user对象保存到"new collection"这个collection中
mongoOperation.insert(
"new collection", user);
//将user的对象列表(List)保存到"user"collection中去
mongoOperation.insertList(userInList);
//将user的对象列表(List)保存到"new collection"collection中去
mongoOperation.insertList("new collection", userInList);

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

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

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

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

  下面举例子说明:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package com.mkyong.core;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.document.mongodb.MongoOperations;
import org.springframework.data.document.mongodb.query.Criteria;
import org.springframework.data.document.mongodb.query.Query;
import com.mkyong.config.SpringMongoConfig;
import com.mkyong.user.User;
public class App {
public static void main(String[] args) {
ApplicationContext ctx
= new AnnotationConfigApplicationContext(
SpringMongoConfig.
class);
MongoOperations mongoOperation
= (MongoOperations) ctx
.getBean(
"mongoTemplate");
//新增一个user对象,并把它放到"ABC"这个collection中
System.out.println("Case 1...");
User userA
= new User("1111", "user", "A", 99);
mongoOperation.save(
"ABC", userA);
// 查找刚插入的user对象
User userA1 = mongoOperation.findOne("ABC",
new Query(Criteria.where("id").is("1111")), User.class);
System.out.println(userA1);
//插入新的user,放到userB这个collection中去
System.out.println("Case 2...");
User userB
= new User("2222", "user", "B", 99);
mongoOperation.save(userB);
// 查找
User userB1 = mongoOperation.findOne(
new Query(Criteria.where("id").is("2222")), User.class);
System.out.println(userB1);
// 插入对象列表,放到arraylist中
System.out.println("Case 3...");
User userC
= new User("3333", "user", "C", 99);
User userD
= new User("4444", "user", "D", 99);
User userE
= new User("5555", "user", "E", 99);
List
<User> userList = new ArrayList<User>();
userList.add(userC);
userList.add(userD);
userList.add(userE);
mongoOperation.insertList(
"ABC-List", userList);
List
<User> users = mongoOperation.find("ABC-List", new Query(Criteria
.where(
"firstname").is("user")), User.class);
for (User temp : users) {
System.out.println(temp);
}
}
}

 

  输出结果如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->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()方法来进行更新,下面

  是相关的例子

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public class App {
public static void main(String[] args) {
ApplicationContext ctx
= new AnnotationConfigApplicationContext(
SpringMongoConfig.
class);
MongoOperations mongoOperation
= (MongoOperations) ctx
.getBean(
"mongoTemplate");
User user
= new User("1000", "user-first", "user-last", 17);
System.out.println(
"Case 1...by save()");
mongoOperation.save(user);
User userPrint1
= mongoOperation.findOne(new Query(Criteria.where("id").is("1000")), User.class);
System.out.println(userPrint1);
//修改user对象的lastname
user.setLastname("new last name");
//更新user对象
mongoOperation.save(user);
User userPrint2
= mongoOperation.findOne(new Query(Criteria.where("id")
.is(
"1000")), User.class);
System.out.println(userPrint2);
// Case 2 ... update firstname field, $set
System.out.println("Case 2...by updateFirst() - $set");
//将id为1000的user对象的firstname属性的值更新为”new firstname”
mongoOperation.updateFirst("user",
new Query(Criteria.where("_id").is("1000")),
Update.update(
"firstname", "new first name"));
User userPrint3
= mongoOperation.findOne(new Query(Criteria.where("id")
.is(
"1000")), User.class);
System.out.println(userPrint3);
//对id为1000的user的age加上10
System.out.println("Case 3...by updateFirst() - $inc");
Update updateAge
= new Update();
updateAge.inc(
"age", 10);
mongoOperation.updateFirst(
"user",
new Query(Criteria.where("_id").is("1000")), updateAge);
User userPrint4
= mongoOperation.findOne(new Query(Criteria
.where(
"_id").is("1000")), User.class);
System.out.println(userPrint4);
}
}

  结果为:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Case 1...by save()
User [id
=1000, firstname=user-first, lastname=user-last, age=17]
User [id
=1000, firstname=user-first, lastname=new last name, age=17]
Case
2...by updateFirst() - $set
User [id
=1000, firstname=new first name, lastname=new last name, age=17]
Case
3...by updateFirst() - $inc
User [id
=1000, firstname=new first name, lastname=new last name, age=27]

 

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->mongoOperation.updateMulti("user",
new Query(Criteria.where("firstname").is("yong")),
Update.update(
"age", 40));

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

  查询Document

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->User user = new User("...");
//找到第一个id=1001的user对象
User user = mongoOperation.findOne("test", new Query(Criteria
.where(
"id").is("1001")), User.class);
//从test集合中获得所有id<=1000并且age=21的user对象
List<User> users = mongoOperation.find("test", new Query(Criteria
.where(
"id").lte("2001").and("age").is(21)), User.class);
//从test 集合中获得所有的user对象列表
List<User> users = mongoOperation.getCollection("test", User.class);

  删除document

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

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->在spring mongodb中, 删除document使用remove方法,示例如下:
User user
= new User("...");
//删除user集合中的user对象
mongoOperation.remove(user);
//删除test集合下的id=2的user对象
mongoOperation.remove("test", new Query(Criteria
.where(
"id").is("2")));
//删除test集合下的,id=3的user对象,最后并且返回这个被删除的对象
User deletedUser = mongoOperation.findAndRemove("test",
new Query(Criteria.where("id").is("3")), User.class);
分享到:
评论

相关推荐

    springboot整合MongoDB初级入门

    总的来说,"springboot整合MongoDB初级入门"的主题涵盖了Java开发中的许多关键概念,包括SpringBoot的自动配置、Spring Data MongoDB的使用、NoSQL数据库的设计与操作,以及如何将这些技术融入到实际项目中。...

    Mongodb入门教程、示例+Spring Boot完整示例+聚合.docx

    "Mongodb入门教程、示例+Spring Boot完整示例+聚合" 本节课将完整地介绍 MongoDB 的入门教程、示例、Spring Boot 完整示例和聚合。 简介 NoSQL(Not Only SQL)是一种非关系型的数据库, MongoDB 是基于分布式...

    主流NOSQL数据库之MongoDB快速入门.docx

    - **Spring集成MongoDB**:通过Spring框架集成MongoDB,利用Spring Data MongoDB简化数据访问逻辑。 #### 六、管理和监控 - **Web界面管理工具**:MongoDB提供了Web界面管理工具,可以通过浏览器访问...

    springdata mongodb api文档

    通过这些内容,可以看出SpringData MongoDB API文档是一个功能全面且内容丰富的资源,它不仅包括了API的使用,还包括了最佳实践和设计指南,旨在帮助开发者高效地使用Spring框架与MongoDB数据库进行交互。

    mongodb+spring+hibernate集成入门demo

    在这个"mongodb+spring+hibernate集成入门demo"中,我们将深入探讨如何将这三者有效地结合在一起,以构建一个强大的后端数据处理系统。 首先,MongoDB 是一个基于分布式文件存储的开源NoSQL数据库,它以JSON格式...

    spring-mongodb-example:Spring 4 MongoDB连接入门

    Spring 4 mongoDB连接-入门套件 将文档插入mongo db集合的愚蠢应用程序。 依赖关系经理 Maven的3.2.5 如何建造 $ cd $ mvn clean package 怎么跑 $ cd $ java -jar target/lib/spring-mongodb-0.1.0.jar 运行...

    springMongodb参考文档中文版

    - **入门**:介绍了如何使用Spring Data MongoDB的反应式支持。 - **连接MongoDB**:通过Spring框架和反应式驱动程序连接MongoDB的方法。 - **ReactiveMongoTemplate**:类似于MongoTemplate,但专注于反应式编程...

    spring-data-mongodb-reference 1.5.4

    - **MongoTemplate 类**:是 Spring Data MongoDB 中的核心类之一,用于执行基本的 CRUD 操作和其他更复杂的操作。 - **实例化 MongoTemplate**:通过构造函数或工厂方法来创建 `MongoTemplate` 实例。 - **...

    java spring+mongodb

    Spring Data MongoDB项目使得与MongoDB数据库的交互变得简单,它提供了ORM(对象关系映射)功能,允许开发者使用Java对象直接操作MongoDB文档。 1. **Spring Data MongoDB入门** - **配置MongoDB**:首先,我们...

    MongoDB入门以及实现微聊即时通讯功能.docx

    MongoDB入门和微聊即时通讯功能实现 在这篇文章中,我们将探索MongoDB的基本概念和Java API的使用,并学习如何使用Spring Boot整合MongoDB来搭建微聊系统实现微聊功能和分布式WebSocket解决方案。 MongoDB入门 ...

    MongoDB从入门到项目实战

    Java驱动程序提供了方便的API来执行各种数据库操作,如MongoDB Java Driver和Spring Data MongoDB。了解如何在Java应用程序中连接MongoDB、执行CRUD操作以及使用Repository模式进行数据访问,将帮助开发者高效地构建...

    SpringBoot+MongoDB+Maven,非常实用的入门资料,使用tomcat启动!

    3. MongoDB的基本操作:了解MongoDB的数据模型,如何连接MongoDB数据库,使用Spring Data MongoDB进行数据操作。 4. RESTful API的开发:利用SpringBoot的@RestController注解创建RESTful服务,提供HTTP接口供...

    SpringData入门到精通

    2. **SpringData MongoDB**:针对文档型数据库MongoDB,提供了无ORM的存取方式。你可以通过MongoRepository接口来操作MongoDB的数据。 3. **SpringData REST**:能够自动将Repository接口暴露为RESTful服务,使得...

    Spring Boot 教程、技术栈示例代码,快速简单上手教程。

    - `spring-boot-mongodb-example`:使用 Spring Data MongoDB 操作 NoSQL 数据库。 - `spring-boot-email-example`:展示如何通过 JavaMailSender 发送邮件。 **4. 数据访问** Spring Boot 提供了对多种数据存储的...

    MongoDB入门需知(for_phper)

    MongoDB是一种流行的开源、分布式文档型数据库,专为处理大量数据而设计,尤其适合于具有高吞吐量的Web应用程序。对于PHP开发者来说,学习MongoDB可以极大地拓展他们的数据库管理能力,提供更灵活的数据存储解决方案...

    MongoDB入门以及实现微聊即时通讯功能的Java代码.zip

    MongoDB是一种流行的开源、分布式文档数据库,用于存储和处理结构化和非结构化数据。它以其灵活的数据模型、高可用性和可扩展性而备受青睐。MongoDB使用JSON格式的文档来存储数据,这使得它非常适合处理半结构化的...

    SpringBoot整合Shiro实现认证授权以及整合MongoDB,开箱即用。

    适合对shiro以及Mongodb不太熟悉想入门的小伙伴。 通过这份源码你可以学到: 1.SpringBoot整合Shiro实现授权,认证等相关技术。 2.SpringBoot整合Mongodb,Oracle数据库。

Global site tag (gtag.js) - Google Analytics