热门标签 | 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);

  
推荐阅读
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • 03Spring使用注解方式注入
    基于注解的DI注入1.导包环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar)2.创建类3.创建spring.xml配置文件(必须在src目录下)该配 ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
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社区 版权所有