数据库

 首页 > 数据库 > MongoDB > Spring MongoDB使用入门

Spring MongoDB使用入门

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

Spring MongoDB使用入门

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

   Spring MongoDB使用入门
分享到:
MongoDB数据库基础入门教程
MongoDB数据库基础入门教程启动数据库 下载 MongoDB, 解压后并启动: $ bin/mongod MongoDB 默认存储数据目录为 /data/db/ (或者 c:\data\db), 当然你也可以修改成不同目录, 只需要指定 ?dbpath 参数: $ bin/mongod --dbpath /path/to/my/data/dir 获取数据库连接 现在我们就可以使用自带的shell工具来操作数...
通过MongoDB客户端samus代码研究解决问题
通过MongoDB客户端samus代码研究解决问题   最近有项目需要用到mongodb,于是在网上下载了mongodb的源码,根据示例写了测试代码,但发现一个非常奇怪的问题:插入记录的速度比获取数据的速度还要快,而且最重要的问题是获取数据的速度无法让人接受。      测试场景:主文档存储人员基本信息,子文档一存储学生上课...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……