MongoDB整合Spring

时间:2023-03-08 18:08:33

1.环境

Jdk:1.6.0_10-rc2

Spring3.1.2  下载

依赖jar文件:

MongoDB整合Spring

2.相关配置

①.Spring配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mongo="http://www.springframework.org/schema/data/mongo"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  11. http://www.springframework.org/schema/data/mongo
  12. http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd">
  13. <mongo:mongo id="mongo"  host="127.0.0.1" port="27017"   />
  14. <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
  15. <constructor-arg name="username"  value="userName"/>
  16. <constructor-arg name="password"  value="password"/>
  17. </bean>
  18. <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  19. <constructor-arg ref="mongo" />
  20. <constructor-arg value="test-mongo" />
  21. <constructor-arg ref="userCredentials" />
  22. </bean>
  23. <bean id="userDao" class="com.x.mongodb.dao.impl.UserDao" />
  24. </beans>

②.MongoTemplate  Api

  1. package com.x.mongodb.dao.support;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.ApplicationContextAware;
  5. import org.springframework.data.mongodb.core.MongoTemplate;
  6. /**
  7. * @author <a href="http://blog.****.net/java2000_wl">java2000_wl</a>
  8. * @version <b>1.0</b>
  9. */
  10. public abstract class AbstractBaseMongoTemplete implements ApplicationContextAware {
  11. protected MongoTemplate mongoTemplate;
  12. /**
  13. * 设置mongoTemplate
  14. * @param mongoTemplate the mongoTemplate to set
  15. */
  16. public void setMongoTemplate(MongoTemplate mongoTemplate) {
  17. this.mongoTemplate = mongoTemplate;
  18. }
  19. public void setApplicationContext(ApplicationContext applicationContext)
  20. throws BeansException {
  21. MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class);
  22. setMongoTemplate(mongoTemplate);
  23. }
  24. }
  1. package com.x.mongodb.dao.impl;
  2. import java.util.List;
  3. import org.springframework.data.mongodb.core.query.Criteria;
  4. import org.springframework.data.mongodb.core.query.Query;
  5. import org.springframework.data.mongodb.core.query.Update;
  6. import com.x.mongodb.dao.IUserDao;
  7. import com.x.mongodb.dao.support.AbstractBaseMongoTemplete;
  8. import com.x.mongodb.entity.User;
  9. /**
  10. * @author <a href="http://blog.****.net/java2000_wl">java2000_wl</a>
  11. * @version <b>1.0</b>
  12. */
  13. public class UserDao extends AbstractBaseMongoTemplete implements IUserDao {
  14. /**
  15. * 新增
  16. * <br>------------------------------<br>
  17. * @param user
  18. */
  19. public void insert(User user) {
  20. mongoTemplate.insert(user);
  21. }
  22. /**
  23. * 批量新增
  24. * <br>------------------------------<br>
  25. * @param users
  26. */
  27. public void insertAll(List<User> users) {
  28. mongoTemplate.insertAll(users);
  29. }
  30. /**
  31. * 删除,按主键id, 如果主键的值为null,删除会失败
  32. * <br>------------------------------<br>
  33. * @param id
  34. */
  35. public void deleteById(String id) {
  36. User user = new User(id, null, 0);
  37. mongoTemplate.remove(user);
  38. }
  39. /**
  40. * 按条件删除
  41. * <br>------------------------------<br>
  42. * @param criteriaUser
  43. */
  44. public void delete(User criteriaUser) {
  45. Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());;
  46. Query query = new Query(criteria);
  47. mongoTemplate.remove(query, User.class);
  48. }
  49. /**
  50. * 删除全部
  51. * <br>------------------------------<br>
  52. */
  53. public void deleteAll() {
  54. mongoTemplate.dropCollection(User.class);
  55. }
  56. /**
  57. * 按主键修改,
  58. * 如果文档中没有相关key 会新增 使用$set修改器
  59. * <br>------------------------------<br>
  60. * @param user
  61. */
  62. public void updateById(User user) {
  63. Criteria criteria = Criteria.where("id").is(user.getId());
  64. Query query = new Query(criteria);
  65. Update update = Update.update("age", user.getAge()).set("name", user.getName());
  66. mongoTemplate.updateFirst(query, update, User.class);
  67. }
  68. /**
  69. * 修改多条
  70. * <br>------------------------------<br>
  71. * @param criteriaUser
  72. * @param user
  73. */
  74. public void update(User criteriaUser, User user) {
  75. Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());;
  76. Query query = new Query(criteria);
  77. Update update = Update.update("name", user.getName()).set("age", user.getAge());
  78. mongoTemplate.updateMulti(query, update, User.class);
  79. }
  80. /**
  81. * 根据主键查询
  82. * <br>------------------------------<br>
  83. * @param id
  84. * @return
  85. */
  86. public User findById(String id) {
  87. return mongoTemplate.findById(id, User.class);
  88. }
  89. /**
  90. * 查询全部
  91. * <br>------------------------------<br>
  92. * @return
  93. */
  94. public List<User> findAll() {
  95. return mongoTemplate.findAll(User.class);
  96. }
  97. /**
  98. * 按条件查询, 分页
  99. * <br>------------------------------<br>
  100. * @param criteriaUser
  101. * @param skip
  102. * @param limit
  103. * @return
  104. */
  105. public List<User> find(User criteriaUser, int skip, int limit) {
  106. Query query = getQuery(criteriaUser);
  107. query.skip(skip);
  108. query.limit(limit);
  109. return mongoTemplate.find(query, User.class);
  110. }
  111. /**
  112. * 根据条件查询出来后 再去修改
  113. * <br>------------------------------<br>
  114. * @param criteriaUser  查询条件
  115. * @param updateUser    修改的值对象
  116. * @return
  117. */
  118. public User findAndModify(User criteriaUser, User updateUser) {
  119. Query query = getQuery(criteriaUser);
  120. Update update = Update.update("age", updateUser.getAge()).set("name", updateUser.getName());
  121. return mongoTemplate.findAndModify(query, update, User.class);
  122. }
  123. /**
  124. * 查询出来后 删除
  125. * <br>------------------------------<br>
  126. * @param criteriaUser
  127. * @return
  128. */
  129. public User findAndRemove(User criteriaUser) {
  130. Query query = getQuery(criteriaUser);
  131. return mongoTemplate.findAndRemove(query, User.class);
  132. }
  133. /**
  134. * count
  135. * <br>------------------------------<br>
  136. * @param criteriaUser
  137. * @return
  138. */
  139. public long count(User criteriaUser) {
  140. Query query = getQuery(criteriaUser);
  141. return mongoTemplate.count(query, User.class);
  142. }
  143. /**
  144. *
  145. * <br>------------------------------<br>
  146. * @param criteriaUser
  147. * @return
  148. */
  149. private Query getQuery(User criteriaUser) {
  150. if (criteriaUser == null) {
  151. criteriaUser = new User();
  152. }
  153. Query query = new Query();
  154. if (criteriaUser.getId() != null) {
  155. Criteria criteria = Criteria.where("id").is(criteriaUser.getId());
  156. query.addCriteria(criteria);
  157. }
  158. if (criteriaUser.getAge() > 0) {
  159. Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());
  160. query.addCriteria(criteria);
  161. }
  162. if (criteriaUser.getName() != null) {
  163. Criteria criteria = Criteria.where("name").regex("^" + criteriaUser.getName());
  164. query.addCriteria(criteria);
  165. }
  166. return query;
  167. }
  168. }
  1. package com.x.mongodb.dao;
  2. import java.util.List;
  3. import com.x.mongodb.entity.User;
  4. /**
  5. * @author <a href="http://blog.****.net/java2000_wl">java2000_wl</a>
  6. * @version <b>1.0</b>
  7. */
  8. public interface IUserDao {
  9. /**
  10. * 新增
  11. * <br>------------------------------<br>
  12. * @param user
  13. */
  14. void insert(User user);
  15. /**
  16. * 新增
  17. * <br>------------------------------<br>
  18. * @param users
  19. */
  20. void insertAll(List<User> users);
  21. /**
  22. * 删除,主键id, 如果主键的值为null,删除会失败
  23. * <br>------------------------------<br>
  24. * @param id
  25. */
  26. void deleteById(String id);
  27. /**
  28. * 按条件删除
  29. * <br>------------------------------<br>
  30. * @param criteriaUser
  31. */
  32. void delete(User criteriaUser);
  33. /**
  34. * 删除全部
  35. * <br>------------------------------<br>
  36. */
  37. void deleteAll();
  38. /**
  39. * 修改
  40. * <br>------------------------------<br>
  41. * @param user
  42. */
  43. void updateById(User user);
  44. /**
  45. * 更新多条
  46. * <br>------------------------------<br>
  47. * @param criteriaUser
  48. * @param user
  49. */
  50. void update(User criteriaUser, User user);
  51. /**
  52. * 根据主键查询
  53. * <br>------------------------------<br>
  54. * @param id
  55. * @return
  56. */
  57. User findById(String id);
  58. /**
  59. * 查询全部
  60. * <br>------------------------------<br>
  61. * @return
  62. */
  63. List<User> findAll();
  64. /**
  65. * 按条件查询
  66. * <br>------------------------------<br>
  67. * @param criteriaUser
  68. * @param skip
  69. * @param limit
  70. * @return
  71. */
  72. List<User> find(User criteriaUser, int skip, int limit);
  73. /**
  74. * 根据条件查询出来后 在去修改
  75. * <br>------------------------------<br>
  76. * @param criteriaUser  查询条件
  77. * @param updateUser    修改的值对象
  78. * @return
  79. */
  80. User findAndModify(User criteriaUser, User updateUser);
  81. /**
  82. * 查询出来后 删除
  83. * <br>------------------------------<br>
  84. * @param criteriaUser
  85. * @return
  86. */
  87. User findAndRemove(User criteriaUser);
  88. /**
  89. * count
  90. * <br>------------------------------<br>
  91. * @param criteriaUser
  92. * @return
  93. */
  94. long count(User criteriaUser);
  95. }
  1. package com.x.mongodb.entity;
  2. import java.io.Serializable;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. /**
  6. * @author <a href="http://blog.****.net/java2000_wl">java2000_wl</a>
  7. * @version <b>1.0</b>
  8. */
  9. public class User implements Serializable {
  10. private static final long serialVersionUID = -5785857960597910259L;
  11. private String id;
  12. private String name;
  13. private int age;
  14. /**
  15. * <br>------------------------------<br>
  16. */
  17. public User() {
  18. }
  19. /**
  20. *
  21. * <br>------------------------------<br>
  22. * @param id
  23. * @param name
  24. * @param age
  25. */
  26. public User(String id, String name, int age) {
  27. super();
  28. this.id = id;
  29. this.name = name;
  30. this.age = age;
  31. }
  32. /**
  33. * 获得id
  34. * @return the id
  35. */
  36. public String getId() {
  37. return id;
  38. }
  39. /**
  40. * 设置id
  41. * @param id the id to set
  42. */
  43. public void setId(String id) {
  44. this.id = id;
  45. }
  46. /**
  47. * 获得name
  48. * @return the name
  49. */
  50. public String getName() {
  51. return name;
  52. }
  53. /**
  54. * 设置name
  55. * @param name the name to set
  56. */
  57. public void setName(String name) {
  58. this.name = name;
  59. }
  60. /**
  61. * 获得age
  62. * @return the age
  63. */
  64. public int getAge() {
  65. return age;
  66. }
  67. /**
  68. * 设置age
  69. * @param age the age to set
  70. */
  71. public void setAge(int age) {
  72. this.age = age;
  73. }
  74. /**
  75. * toString
  76. */
  77. public String toString() {
  78. Map<String, String> map = new HashMap<String, String>();
  79. map.put("id", id);
  80. map.put("name", name);
  81. map.put("age", String.valueOf(age));
  82. return map.toString();
  83. }
  84. }
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.List;
  4. import org.junit.Test;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import com.x.mongodb.dao.IUserDao;
  8. import com.x.mongodb.entity.User;
  9. /**
  10. * @author <a href="http://blog.****.net/java2000_wl">java2000_wl</a>
  11. * @version <b>1.0</b>
  12. */
  13. public class UserDaoTest {
  14. /**
  15. * 新增
  16. * <br>------------------------------<br>
  17. */
  18. @Test
  19. public void testInsert() {
  20. getUserDao().insert(new User(null, "testUser", 21));
  21. }
  22. /**
  23. * 批量新增
  24. * <br>------------------------------<br>
  25. */
  26. @Test
  27. public void testInsertAll() {
  28. List<User> list = new ArrayList<User>();
  29. for (int i = 0; i < 10; i++) {
  30. list.add(new User(null, "testUser" + i, 21 + i));
  31. }
  32. getUserDao().insertAll(list);
  33. }
  34. /**
  35. * 根据主键删除
  36. * <br>------------------------------<br>
  37. */
  38. @Test
  39. public void testDeleteById() {
  40. String id = "5058184ec85607e42c4bfad8";
  41. getUserDao().deleteById(id);
  42. }
  43. /**
  44. * 条件删除
  45. * <br>------------------------------<br>
  46. */
  47. @Test
  48. public void testDelete() {
  49. //删除年龄大于25的
  50. getUserDao().delete(new User(null, null, 25));
  51. }
  52. /**
  53. * 删除全部
  54. * <br>------------------------------<br>
  55. */
  56. @Test
  57. public void testDeleteAll() {
  58. getUserDao().deleteAll();
  59. }
  60. /**
  61. * 修改  根据id修改
  62. * <br>------------------------------<br>
  63. */
  64. @Test
  65. public void testUpdateById() {
  66. getUserDao().updateById(new User("50581c08c856346f02e9842c", "张三", 100));
  67. }
  68. /**
  69. * 修改多个
  70. * <br>------------------------------<br>
  71. */
  72. @Test
  73. public void update() {
  74. //修改年龄大于29岁的 姓名为“王五“
  75. User criteriaUser = new User(null, null, 29);
  76. User user = new User(null, "王五", 39);
  77. getUserDao().update(criteriaUser, user);
  78. }
  79. /**
  80. * 按主键查询, 如果不存在 返回null
  81. * <br>------------------------------<br>
  82. */
  83. @Test
  84. public void testFindById() {
  85. User user = getUserDao().findById("50581c08c856346f02e98425");
  86. print(user);
  87. }
  88. /**
  89. * 查询全部
  90. * <br>------------------------------<br>
  91. */
  92. @Test
  93. public void testFindAll() {
  94. List<User> list = getUserDao().findAll();
  95. print(list);
  96. }
  97. /**
  98. * 按条件查询
  99. * <br>------------------------------<br>
  100. */
  101. @Test
  102. public void testFind() {
  103. //查询25岁以上的, 分页
  104. User criteriaUser = new User(null, null, 20);
  105. List<User> list = getUserDao().find(criteriaUser, 1, 10);
  106. print(list);
  107. }
  108. /**
  109. * 查询出来后  修改
  110. * <br>------------------------------<br>
  111. */
  112. @Test
  113. public void testFindAndModify() {
  114. User criteriaUser = new User("50581c08c856346f02e9842d", null, 0);
  115. User updateUser = new User(null, "张三", 100);
  116. updateUser = getUserDao().findAndModify(criteriaUser, updateUser);
  117. print(updateUser);
  118. }
  119. /**
  120. * 查询出来后 删除
  121. * <br>------------------------------<br>
  122. */
  123. @Test
  124. public void testFindAndRemove() {
  125. User criteriaUser = new User("50581c08c856346f02e9842d", null, 0);
  126. criteriaUser = getUserDao().findAndRemove(criteriaUser);
  127. print(criteriaUser);
  128. }
  129. /**
  130. * count
  131. * <br>------------------------------<br>
  132. */
  133. @Test
  134. public void testCount() {
  135. User criteriaUser = new User(null, "test", 0);
  136. long count = getUserDao().count(criteriaUser);
  137. print(count);
  138. }
  139. public void print(Object object) {
  140. if (object == null || !(object instanceof Collection)) {
  141. System.out.println(object);
  142. return;
  143. }
  144. List<?> list = (List<?>) object;
  145. for (Object obj : list) {
  146. System.out.println(obj);
  147. }
  148. }
  149. public IUserDao getUserDao() {
  150. String configLocations = "applicationContext.xml";
  151. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocations);
  152. IUserDao userDao = applicationContext.getBean("userDao", IUserDao.class);
  153. return userDao;
  154. }
  155. }
      摘自:http://blog.****.net/java2000_wl/article/details/7983547