spring调用mongodb
Posted 空心柳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring调用mongodb相关的知识,希望对你有一定的参考价值。
1.环境
Jdk:1.6.0_10-rc2
Spring3.1.2 下载
依赖jar文件:
2.相关配置
①.spring配置文件
<?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/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 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"> <mongo:mongo id="mongo" host="127.0.0.1" port="27017" /> <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials"> <constructor-arg name="username" value="userName"/> <constructor-arg name="password" value="password"/> </bean> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo" /> <constructor-arg value="test-mongo" /> <constructor-arg ref="userCredentials" /> </bean> <bean id="userDao" class="com.x.mongodb.dao.impl.UserDao" /> </beans>
②.MongoTemplate Api
package com.x.mongodb.dao.support; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.data.mongodb.core.MongoTemplate; /** * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public abstract class AbstractBaseMongoTemplete implements ApplicationContextAware { protected MongoTemplate mongoTemplate; /** * 设置mongoTemplate * @param mongoTemplate the mongoTemplate to set */ public void setMongoTemplate(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class); setMongoTemplate(mongoTemplate); } } package com.x.mongodb.dao.impl; import java.util.List; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import com.x.mongodb.dao.IUserDao; import com.x.mongodb.dao.support.AbstractBaseMongoTemplete; import com.x.mongodb.entity.User; /** * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public class UserDao extends AbstractBaseMongoTemplete implements IUserDao { /** * 新增 * <br>------------------------------<br> * @param user */ public void insert(User user) { mongoTemplate.insert(user); } /** * 批量新增 * <br>------------------------------<br> * @param users */ public void insertAll(List<User> users) { mongoTemplate.insertAll(users); } /** * 删除,按主键id, 如果主键的值为null,删除会失败 * <br>------------------------------<br> * @param id */ public void deleteById(String id) { User user = new User(id, null, 0); mongoTemplate.remove(user); } /** * 按条件删除 * <br>------------------------------<br> * @param criteriaUser */ public void delete(User criteriaUser) { Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());; Query query = new Query(criteria); mongoTemplate.remove(query, User.class); } /** * 删除全部 * <br>------------------------------<br> */ public void deleteAll() { mongoTemplate.dropCollection(User.class); } /** * 按主键修改, * 如果文档中没有相关key 会新增 使用$set修改器 * <br>------------------------------<br> * @param user */ public void updateById(User user) { Criteria criteria = Criteria.where("id").is(user.getId()); Query query = new Query(criteria); Update update = Update.update("age", user.getAge()).set("name", user.getName()); mongoTemplate.updateFirst(query, update, User.class); } /** * 修改多条 * <br>------------------------------<br> * @param criteriaUser * @param user */ public void update(User criteriaUser, User user) { Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());; Query query = new Query(criteria); Update update = Update.update("name", user.getName()).set("age", user.getAge()); mongoTemplate.updateMulti(query, update, User.class); } /** * 根据主键查询 * <br>------------------------------<br> * @param id * @return */ public User findById(String id) { return mongoTemplate.findById(id, User.class); } /** * 查询全部 * <br>------------------------------<br> * @return */ public List<User> findAll() { return mongoTemplate.findAll(User.class); } /** * 按条件查询, 分页 * <br>------------------------------<br> * @param criteriaUser * @param skip * @param limit * @return */ public List<User> find(User criteriaUser, int skip, int limit) { Query query = getQuery(criteriaUser); query.skip(skip); query.limit(limit); return mongoTemplate.find(query, User.class); } /** * 根据条件查询出来后 再去修改 * <br>------------------------------<br> * @param criteriaUser 查询条件 * @param updateUser 修改的值对象 * @return */ public User findAndModify(User criteriaUser, User updateUser) { Query query = getQuery(criteriaUser); Update update = Update.update("age", updateUser.getAge()).set("name", updateUser.getName()); return mongoTemplate.findAndModify(query, update, User.class); } /** * 查询出来后 删除 * <br>------------------------------<br> * @param criteriaUser * @return */ public User findAndRemove(User criteriaUser) { Query query = getQuery(criteriaUser); return mongoTemplate.findAndRemove(query, User.class); } /** * count * <br>------------------------------<br> * @param criteriaUser * @return */ public long count(User criteriaUser) { Query query = getQuery(criteriaUser); return mongoTemplate.count(query, User.class); } /** * * <br>------------------------------<br> * @param criteriaUser * @return */ private Query getQuery(User criteriaUser) { if (criteriaUser == null) { criteriaUser = new User(); } Query query = new Query(); if (criteriaUser.getId() != null) { Criteria criteria = Criteria.where("id").is(criteriaUser.getId()); query.addCriteria(criteria); } if (criteriaUser.getAge() > 0) { Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge()); query.addCriteria(criteria); } if (criteriaUser.getName() != null) { Criteria criteria = Criteria.where("name").regex("^" + criteriaUser.getName()); query.addCriteria(criteria); } return query; } } [java] view plain copy print? package com.x.mongodb.dao; import java.util.List; import com.x.mongodb.entity.User; /** * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public interface IUserDao { /** * 新增 * <br>------------------------------<br> * @param user */ void insert(User user); /** * 新增 * <br>------------------------------<br> * @param users */ void insertAll(List<User> users); /** * 删除,主键id, 如果主键的值为null,删除会失败 * <br>------------------------------<br> * @param id */ void deleteById(String id); /** * 按条件删除 * <br>------------------------------<br> * @param criteriaUser */ void delete(User criteriaUser); /** * 删除全部 * <br>------------------------------<br> */ void deleteAll(); /** * 修改 * <br>------------------------------<br> * @param user */ void updateById(User user); /** * 更新多条 * <br>------------------------------<br> * @param criteriaUser * @param user */ void update(User criteriaUser, User user); /** * 根据主键查询 * <br>------------------------------<br> * @param id * @return */ User findById(String id); /** * 查询全部 * <br>------------------------------<br> * @return */ List<User> findAll(); /** * 按条件查询 * <br>------------------------------<br> * @param criteriaUser * @param skip * @param limit * @return */ List<User> find(User criteriaUser, int skip, int limit); /** * 根据条件查询出来后 在去修改 * <br>------------------------------<br> * @param criteriaUser 查询条件 * @param updateUser 修改的值对象 * @return */ User findAndModify(User criteriaUser, User updateUser); /** * 查询出来后 删除 * <br>------------------------------<br> * @param criteriaUser * @return */ User findAndRemove(User criteriaUser); /** * count * <br>------------------------------<br> * @param criteriaUser * @return */ long count(User criteriaUser); } [java] view plain copy print? package com.x.mongodb.entity; import java.io.Serializable; import java.util.HashMap; import java.util.Map; /** * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public class User implements Serializable { private static final long serialVersionUID = -5785857960597910259L; private String id; private String name; private int age; /** * <br>------------------------------<br> */ public User() { } /** * * <br>------------------------------<br> * @param id * @param name * @param age */ public User(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } /** * 获得id * @return the id */ public String getId() { return id; } /** * 设置id * @param id the id to set */ public void setId(String id) { this.id = id; } /** * 获得name * @return the name */ public String getName() { return name; } /** * 设置name * @param name the name to set */ public void setName(String name) { this.name = name; } /** * 获得age * @return the age */ public int getAge() { return age; } /** * 设置age * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * toString */ public String toString() { Map<String, String> map = new HashMap<String, String>(); map.put("id", id); map.put("name", name); map.put("age", String.valueOf(age)); return map.toString(); } } [java] view plain copy print? import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.x.mongodb.dao.IUserDao; import com.x.mongodb.entity.User; /** * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public class UserDaoTest { /** * 新增 * <br>------------------------------<br> */ @Test public void testInsert() { getUserDao().insert(new User(null, "testUser", 21)); } /** * 批量新增 * <br>------------------------------<br> */ @Test public void testInsertAll() { List<User> list = new ArrayList<User>(); for (int i = 0; i < 10; i++) { list.add(new User(null, "testUser" + i, 21 + i)); } getUserDao().insertAll(list); } /** * 根据主键删除 * <br>------------------------------<br> */ @Test public void testDeleteById() { String id = "5058184ec85607e42c4bfad8"; getUserDao().deleteById(id); } /** * 条件删除 * <br>------------------------------<br> */ @Test public void testDelete() { //删除年龄大于25的 getUserDao().delete(new User(null, null, 25)); } /** * 删除全部 * <br>------------------------------<br> */ @Test public void testDeleteAll() { getUserDao().deleteAll(); } /** * 修改 根据id修改 * <br>------------------------------<br> */ @Test public void testUpdateById() { getUserDao().updateById(new User("50581c08c856346f02e9842c", "张三", 100)); } /** * 修改多个 * <br>------------------------------<br> */ @Test public void update() { //修改年龄大于29岁的 姓名为“王五“ User criteriaUser = new User(null, null, 29); User user = new User(null, "王五", 39); getUserDao().update(criteriaUser, user); } /** * 按主键查询, 如果不存在 返回null * <br>------------------------------<br> */ @Test public void testFindById() { User user = getUserDao().findById("50581c08c856346f02e98425"); print(user); } /** * 查询全部 * <br>------------------------------<br> */ @Test public void testFindAll() { List<User> list = getUserDao().findAll(); print(list); } /** * 按条件查询 * <br>------------------------------<br> */ @Test public void testFind() { //查询25岁以上的, 分页 User criteriaUser = new User(null, null, 20); List<User> list = getUserDao().find(criteriaUser, 1, 10); print(list); } /** * 查询出来后 修改 * <br>------------------------------<br> */ @Test public void testFindAndModify() { User criteriaUser = new User("50581c08c856346f02e9842d", null, 0); User updateUser = new User(null, "张三", 100); updateUser = getUserDao().findAndModify(criteriaUser, updateUser); print(updateUser); } /** * 查询出来后 删除 * <br>------------------------------<br> */ @Test public void testFindAndRemove() { User criteriaUser = new User("50581c08c856346f02e9842d", null, 0); criteriaUser = getUserDao().findAndRemove(criteriaUser); print(criteriaUser); } /** * count * <br>------------------------------<br> */ @Test public void testCount() { User criteriaUser = new User(null, "test", 0); long count = getUserDao().count(criteriaUser); print(count); } public void print(Object object) { if (object == null || !(object instanceof Collection)) { System.out.println(object); return; } List<?> list = (List<?>) object; for (Object obj : list) { System.out.println(obj); } } public IUserDao getUserDao() { String configLocations = "applicationContext.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocations); IUserDao userDao = applicationContext.getBean("userDao", IUserDao.class); return userDao; } }
以上是关于spring调用mongodb的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects
关于 spring 使用 mongodb 的 mongotemplate 对象操作数据库,对象注入问题(即该对象能否正常的调用相应的CRUD方法来处理数据)