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

SpringMongoDB使用入门

在上一篇教程中,我们学习了如何使用Mongodb的JAVAAPI对Mongodb进行相关的数据库操作,在本文中,将学习使用SpringforMongodb去简化对Mongodb的操作。安装SpringforMongodbSpring项目为方便对Mongodb的操作,建立了spring-data的子项目,地址在:http

  在上一篇教程中,我们学习了如何使用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类,


  package com.mkyong.config;

  import org.springframework.context.annotation.Bean;

  import org.springframework.context.annotation.Configuration;

  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类即可。如下代码所示:


  ApplicationContext

  ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class);

  MongoOperations

  mOngoOperation= (MongoOperations)ctx.getBean(mongoTemplate);

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

  使用XML配置文件

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


  xml version=1.0 encoding=?>

  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>

  mongo:mongo host=localhost port=27017 />

  bean

  constructor-arg ref=mongo />

  constructor-arg name=databaseName value=yourdb />

  constructor-arg name=defaultCollectionName value=yourCollection />

  bean>

  context:annotation-config />

  beans>

  注意这里引用相关的命名空间xmlns:mOngo=http://www.springframework.org/schema/data/mongo

  ,并且在名为mongoTemplate中注入相关的数据库地址,数据库名即可,使用方法如下:


  ApplicationContext ctx = new GenericXmlApplicationContext(mongo-config.xml);

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

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

  体类user如下:


  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的数据集中。


  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 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);

  //显示当前列表

  ListUser> listUser =

  mongoOperation.getCollection(userprofile, User.class);

  System.out.println(Number of user = + listUser.size());

  输出结果如下:


  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有如下几种方法:


  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)保存到usercollection中去

  mongoOperation.insertList(userInList);

  //将user的对象列表(List)保存到new collectioncollection中去

  mongoOperation.insertList(new collection, userInList);

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

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

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

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

  下面举例子说明:


  package com.mkyong.core;

  import java.util.ArrayList;

  import java.util.List;

  import org.springframework.context.ApplicationContext;

  import org.springframework.context.annotation.AnnotationConfigApplicationContext;

  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);

  ListUser> userList = new ArrayListUser>();

  userList.add(userC);

  userList.add(userD);

  userList.add(userE);

  mongoOperation.insertList(ABC-List, userList);

  ListUser> users = mongoOperation.find(ABC-List, new Query(Criteria

  .where(firstname).is(user)), User.class);

  for (User temp : users) {

  System.out.println(temp);

  输出结果如下:


  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()方法来进行更新,下面

  是相关的例子


  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);

  结果为:


  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是将所有的对象进行更新,比如:


  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,常见的用法如下:


  User user = new User(...);

  //找到第一个id=1001的user对象

  User user = mongoOperation.findOne(test, new Query(Criteria

  .where(id).is(1001)), User.class);

  //从test集合中获得所有id

  ListUser> users = mongoOperation.find(test, new Query(Criteria

  .where(id).lte(2001).and(age).is(21)), User.class);

  //从test 集合中获得所有的user对象列表

  ListUser> users = mongoOperation.getCollection(test, User.class);

  删除document

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


  在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);

  
推荐阅读
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • Spring 中 Bean 信息定义的三种方法探讨
    本文详细探讨了 Spring 框架中实现 Bean 信息定义的三种方法:基于 XML 配置、基于注解配置和基于 Java 类配置。每种方法都有其适用场景和优缺点。 ... [详细]
  • 匡威携React科技重磅回归篮球鞋市场
    匡威凭借其经典鞋款 Chuck Taylor All Star 重返篮球鞋领域,推出全新 All Star Pro BB 篮球鞋,搭载 Nike 最新技术。 ... [详细]
author-avatar
用释怀来成全悲伤_490_905_560
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有