Spring Mongodb
来源:互联网 发布:淘宝小白羊机油假的吗 编辑:程序博客网 时间:2024/05/21 08:03
安装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 org.springframework.data.document.mongodb.MongoTemplate;import org.springframework.data.document.mongodb.config.AbstractMongoConfiguration;import com.mongodb.Mongo;/*** Spring MongoDB configuration file* */@Configurationpublic 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类即可。如下代码所示:
ApplicationContextctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class);MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");
当获得了mongoOperation对象的实例后,即可进行对mongodb的相关操作。
使用XML配置文件
使用XML配置文件的方法如下:
<?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中注入相关的数据库地址,数据库名即可,使用方法如下:
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 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());}}输出结果如下:
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)保存到"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的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。
下面举例子说明:
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);}}}输出结果如下:
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对象的lastnameuser.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, $setSystem.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加上10System.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() - $setUser [id=1000, firstname=new first name, lastname=new last name, age=17]Case 3...by updateFirst() - $incUser [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<=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方法,示例如下:
在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
- Spring Mongodb
- Spring Mongodb
- MongoDB 整合Spring(spring-data-mongodb)
- spring-data-mongodb MongoDB 整合 Spring
- Spring MongoDB集成
- Spring Mongodb入门
- spring-data 集成mongodb
- mongodb and spring
- spring管理mongodb
- mongodb与spring集成
- Spring整合- mongodb
- spring mongodb集成
- MongoDB的Spring配置
- spring MongoDB 集成(分页)
- Spring Mongodb集成
- spring+Mongodb简单整合
- spring mongodb学习
- 链表和数组的区别
- SpringMVC配置XML
- 法语时态概括
- Wince动态加载字体资源
- MySQL数据库定时自动备份脚本
- Spring Mongodb
- Scala极速入门
- junit4测试
- iOS 摄像功能
- 聊天室客户端和网页版的区别
- datagrid 如何隐藏相关列
- 建模基础
- 如何在 Eclipse 中显示行号
- UML基本架构建模--类的通用建模技术(一)