MongoDB整合Spring

1.环境

     Jdk:1.6.0_10-rc2

     Spring3.1.2  下载

     依赖jar文件:

  

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.       
  14.     <mongo:mongo id="mongo"  host="127.0.0.1" port="27017"   />  
  15.       
  16.     <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">  
  17.         <constructor-arg name="username"  value="userName"/>  
  18.         <constructor-arg name="password"  value="password"/>  
  19.     </bean>  
  20.       
  21.     <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
  22.         <constructor-arg ref="mongo" />  
  23.         <constructor-arg value="test-mongo" />  
  24.         <constructor-arg ref="userCredentials" />  
  25.     </bean>  
  26.       
  27.     <bean id="userDao" class="com.x.mongodb.dao.impl.UserDao" />  
  28. </beans>  

②.MongoTemplate  Api

 

  1. package com.x.mongodb.dao.support;  
  2.   
  3. import org.springframework.beans.BeansException;  
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.context.ApplicationContextAware;  
  6. import org.springframework.data.mongodb.core.MongoTemplate;  
  7.   
  8. /** 
  9.  * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> 
  10.  * @version <b>1.0</b> 
  11.  */  
  12. public abstract class AbstractBaseMongoTemplete implements ApplicationContextAware {  
  13.       
  14.     protected MongoTemplate mongoTemplate;  
  15.   
  16.     /** 
  17.      * 设置mongoTemplate 
  18.      * @param mongoTemplate the mongoTemplate to set 
  19.      */  
  20.     public void setMongoTemplate(MongoTemplate mongoTemplate) {  
  21.         this.mongoTemplate = mongoTemplate;  
  22.     }  
  23.       
  24.     public void setApplicationContext(ApplicationContext applicationContext)  
  25.             throws BeansException {  
  26.         MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class);  
  27.         setMongoTemplate(mongoTemplate);  
  28.     }  
  29. }  

  1. package com.x.mongodb.dao.impl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.data.mongodb.core.query.Criteria;  
  6. import org.springframework.data.mongodb.core.query.Query;  
  7. import org.springframework.data.mongodb.core.query.Update;  
  8.   
  9. import com.x.mongodb.dao.IUserDao;  
  10. import com.x.mongodb.dao.support.AbstractBaseMongoTemplete;  
  11. import com.x.mongodb.entity.User;  
  12.   
  13. /** 
  14.  * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> 
  15.  * @version <b>1.0</b> 
  16.  */  
  17. public class UserDao extends AbstractBaseMongoTemplete implements IUserDao {  
  18.   
  19.     /** 
  20.      * 新增 
  21.      * <br>------------------------------<br> 
  22.      * @param user 
  23.      */  
  24.     public void insert(User user) {  
  25.         mongoTemplate.insert(user);  
  26.     }  
  27.       
  28.     /** 
  29.      * 批量新增 
  30.      * <br>------------------------------<br> 
  31.      * @param users 
  32.      */  
  33.     public void insertAll(List<User> users) {  
  34.         mongoTemplate.insertAll(users);  
  35.     }  
  36.       
  37.     /** 
  38.      * 删除,按主键id, 如果主键的值为null,删除会失败 
  39.      * <br>------------------------------<br> 
  40.      * @param id 
  41.      */  
  42.     public void deleteById(String id) {  
  43.         User user = new User(id, null0);  
  44.         mongoTemplate.remove(user);  
  45.     }  
  46.       
  47.     /** 
  48.      * 按条件删除 
  49.      * <br>------------------------------<br> 
  50.      * @param criteriaUser 
  51.      */  
  52.     public void delete(User criteriaUser) {  
  53.         Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());;  
  54.         Query query = new Query(criteria);  
  55.         mongoTemplate.remove(query, User.class);  
  56.     }  
  57.       
  58.     /** 
  59.      * 删除全部 
  60.      * <br>------------------------------<br> 
  61.      */  
  62.     public void deleteAll() {  
  63.         mongoTemplate.dropCollection(User.class);  
  64.     }  
  65.       
  66.     /** 
  67.      * 按主键修改, 
  68.      * 如果文档中没有相关key 会新增 使用$set修改器 
  69.      * <br>------------------------------<br> 
  70.      * @param user 
  71.      */  
  72.     public void updateById(User user) {  
  73.         Criteria criteria = Criteria.where("id").is(user.getId());  
  74.         Query query = new Query(criteria);  
  75.         Update update = Update.update("age", user.getAge()).set("name", user.getName());  
  76.         mongoTemplate.updateFirst(query, update, User.class);  
  77.     }  
  78.       
  79.     /** 
  80.      * 修改多条 
  81.      * <br>------------------------------<br> 
  82.      * @param criteriaUser 
  83.      * @param user 
  84.      */  
  85.     public void update(User criteriaUser, User user) {  
  86.         Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());;  
  87.         Query query = new Query(criteria);  
  88.         Update update = Update.update("name", user.getName()).set("age", user.getAge());  
  89.         mongoTemplate.updateMulti(query, update, User.class);  
  90.     }  
  91.       
  92.     /** 
  93.      * 根据主键查询 
  94.      * <br>------------------------------<br> 
  95.      * @param id 
  96.      * @return 
  97.      */  
  98.     public User findById(String id) {  
  99.         return mongoTemplate.findById(id, User.class);  
  100.     }  
  101.       
  102.     /** 
  103.      * 查询全部 
  104.      * <br>------------------------------<br> 
  105.      * @return 
  106.      */  
  107.     public List<User> findAll() {  
  108.         return mongoTemplate.findAll(User.class);  
  109.     }  
  110.       
  111.     /** 
  112.      * 按条件查询, 分页 
  113.      * <br>------------------------------<br> 
  114.      * @param criteriaUser 
  115.      * @param skip 
  116.      * @param limit 
  117.      * @return 
  118.      */  
  119.     public List<User> find(User criteriaUser, int skip, int limit) {  
  120.         Query query = getQuery(criteriaUser);  
  121.         query.skip(skip);  
  122.         query.limit(limit);  
  123.         return mongoTemplate.find(query, User.class);  
  124.     }  
  125.       
  126.     /** 
  127.      * 根据条件查询出来后 再去修改 
  128.      * <br>------------------------------<br> 
  129.      * @param criteriaUser  查询条件 
  130.      * @param updateUser    修改的值对象 
  131.      * @return 
  132.      */  
  133.     public User findAndModify(User criteriaUser, User updateUser) {  
  134.         Query query = getQuery(criteriaUser);  
  135.         Update update = Update.update("age", updateUser.getAge()).set("name", updateUser.getName());  
  136.         return mongoTemplate.findAndModify(query, update, User.class);  
  137.     }  
  138.       
  139.     /** 
  140.      * 查询出来后 删除 
  141.      * <br>------------------------------<br> 
  142.      * @param criteriaUser 
  143.      * @return 
  144.      */  
  145.     public User findAndRemove(User criteriaUser) {  
  146.         Query query = getQuery(criteriaUser);  
  147.         return mongoTemplate.findAndRemove(query, User.class);  
  148.     }  
  149.       
  150.     /** 
  151.      * count 
  152.      * <br>------------------------------<br> 
  153.      * @param criteriaUser 
  154.      * @return 
  155.      */  
  156.     public long count(User criteriaUser) {  
  157.         Query query = getQuery(criteriaUser);  
  158.         return mongoTemplate.count(query, User.class);  
  159.     }  
  160.   
  161.     /** 
  162.      * 
  163.      * <br>------------------------------<br> 
  164.      * @param criteriaUser 
  165.      * @return 
  166.      */  
  167.     private Query getQuery(User criteriaUser) {  
  168.         if (criteriaUser == null) {  
  169.             criteriaUser = new User();  
  170.         }  
  171.         Query query = new Query();  
  172.         if (criteriaUser.getId() != null) {  
  173.             Criteria criteria = Criteria.where("id").is(criteriaUser.getId());  
  174.             query.addCriteria(criteria);  
  175.         }  
  176.         if (criteriaUser.getAge() > 0) {  
  177.             Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());  
  178.             query.addCriteria(criteria);  
  179.         }  
  180.         if (criteriaUser.getName() != null) {  
  181.             Criteria criteria = Criteria.where("name").regex("^" + criteriaUser.getName());  
  182.             query.addCriteria(criteria);  
  183.         }  
  184.         return query;  
  185.     }  
  186. }  

  1. package com.x.mongodb.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.x.mongodb.entity.User;  
  6.   
  7. /** 
  8.  * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> 
  9.  * @version <b>1.0</b> 
  10.  */  
  11. public interface IUserDao {  
  12.       
  13.     /** 
  14.      * 新增 
  15.      * <br>------------------------------<br> 
  16.      * @param user 
  17.      */  
  18.     void insert(User user);  
  19.       
  20.     /** 
  21.      * 新增 
  22.      * <br>------------------------------<br> 
  23.      * @param users 
  24.      */  
  25.     void insertAll(List<User> users);  
  26.       
  27.     /** 
  28.      * 删除,主键id, 如果主键的值为null,删除会失败 
  29.      * <br>------------------------------<br> 
  30.      * @param id 
  31.      */  
  32.     void deleteById(String id);  
  33.       
  34.     /** 
  35.      * 按条件删除 
  36.      * <br>------------------------------<br> 
  37.      * @param criteriaUser 
  38.      */  
  39.     void delete(User criteriaUser);  
  40.       
  41.     /** 
  42.      * 删除全部 
  43.      * <br>------------------------------<br> 
  44.      */  
  45.     void deleteAll();  
  46.       
  47.     /** 
  48.      * 修改 
  49.      * <br>------------------------------<br> 
  50.      * @param user 
  51.      */  
  52.     void updateById(User user);  
  53.       
  54.     /** 
  55.      * 更新多条 
  56.      * <br>------------------------------<br> 
  57.      * @param criteriaUser 
  58.      * @param user 
  59.      */  
  60.     void update(User criteriaUser, User user);  
  61.       
  62.     /** 
  63.      * 根据主键查询 
  64.      * <br>------------------------------<br> 
  65.      * @param id 
  66.      * @return 
  67.      */  
  68.     User findById(String id);  
  69.       
  70.     /** 
  71.      * 查询全部 
  72.      * <br>------------------------------<br> 
  73.      * @return 
  74.      */  
  75.     List<User> findAll();  
  76.       
  77.     /** 
  78.      * 按条件查询 
  79.      * <br>------------------------------<br> 
  80.      * @param criteriaUser 
  81.      * @param skip 
  82.      * @param limit 
  83.      * @return 
  84.      */  
  85.     List<User> find(User criteriaUser, int skip, int limit);  
  86.       
  87.     /** 
  88.      * 根据条件查询出来后 在去修改 
  89.      * <br>------------------------------<br> 
  90.      * @param criteriaUser  查询条件 
  91.      * @param updateUser    修改的值对象 
  92.      * @return 
  93.      */  
  94.     User findAndModify(User criteriaUser, User updateUser);  
  95.       
  96.     /** 
  97.      * 查询出来后 删除 
  98.      * <br>------------------------------<br> 
  99.      * @param criteriaUser 
  100.      * @return 
  101.      */  
  102.     User findAndRemove(User criteriaUser);  
  103.       
  104.     /** 
  105.      * count 
  106.      * <br>------------------------------<br> 
  107.      * @param criteriaUser 
  108.      * @return 
  109.      */  
  110.     long count(User criteriaUser);  
  111. }  

  1. package com.x.mongodb.entity;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. /** 
  8.  * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> 
  9.  * @version <b>1.0</b> 
  10.  */  
  11. public class User implements Serializable {  
  12.   
  13.     private static final long serialVersionUID = -5785857960597910259L;  
  14.       
  15.     private String id;  
  16.       
  17.     private String name;  
  18.       
  19.     private int age;  
  20.       
  21.     /** 
  22.      * <br>------------------------------<br> 
  23.      */  
  24.     public User() {  
  25.     }  
  26.   
  27.     /** 
  28.      *  
  29.      * <br>------------------------------<br> 
  30.      * @param id 
  31.      * @param name 
  32.      * @param age 
  33.      */  
  34.     public User(String id, String name, int age) {  
  35.         super();  
  36.         this.id = id;  
  37.         this.name = name;  
  38.         this.age = age;  
  39.     }  
  40.   
  41.     /** 
  42.      * 获得id 
  43.      * @return the id 
  44.      */  
  45.     public String getId() {  
  46.         return id;  
  47.     }  
  48.   
  49.     /** 
  50.      * 设置id 
  51.      * @param id the id to set 
  52.      */  
  53.     public void setId(String id) {  
  54.         this.id = id;  
  55.     }  
  56.   
  57.     /** 
  58.      * 获得name 
  59.      * @return the name 
  60.      */  
  61.     public String getName() {  
  62.         return name;  
  63.     }  
  64.   
  65.     /** 
  66.      * 设置name 
  67.      * @param name the name to set 
  68.      */  
  69.     public void setName(String name) {  
  70.         this.name = name;  
  71.     }  
  72.   
  73.     /** 
  74.      * 获得age 
  75.      * @return the age 
  76.      */  
  77.     public int getAge() {  
  78.         return age;  
  79.     }  
  80.   
  81.     /** 
  82.      * 设置age 
  83.      * @param age the age to set 
  84.      */  
  85.     public void setAge(int age) {  
  86.         this.age = age;  
  87.     }  
  88.       
  89.     /** 
  90.      * toString 
  91.      */  
  92.     public String toString() {  
  93.         Map<String, String> map = new HashMap<String, String>();  
  94.         map.put("id", id);  
  95.         map.put("name", name);  
  96.         map.put("age", String.valueOf(age));  
  97.         return map.toString();  
  98.     }  
  99. }  

  1. import java.util.ArrayList;  
  2. import java.util.Collection;  
  3. import java.util.List;  
  4.   
  5. import org.junit.Test;  
  6. import org.springframework.context.ApplicationContext;  
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  8.   
  9. import com.x.mongodb.dao.IUserDao;  
  10. import com.x.mongodb.entity.User;  
  11.   
  12. /** 
  13.  * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> 
  14.  * @version <b>1.0</b> 
  15.  */  
  16. public class UserDaoTest {  
  17.       
  18.     /** 
  19.      * 新增  
  20.      * <br>------------------------------<br> 
  21.      */  
  22.     @Test  
  23.     public void testInsert() {  
  24.         getUserDao().insert(new User(null"testUser"21));  
  25.     }  
  26.       
  27.     /** 
  28.      * 批量新增  
  29.      * <br>------------------------------<br> 
  30.      */  
  31.     @Test  
  32.     public void testInsertAll() {  
  33.         List<User> list = new ArrayList<User>();  
  34.         for (int i = 0; i < 10; i++) {  
  35.             list.add(new User(null"testUser" + i, 21 + i));  
  36.         }  
  37.         getUserDao().insertAll(list);  
  38.     }  
  39.       
  40.     /** 
  41.      * 根据主键删除  
  42.      * <br>------------------------------<br> 
  43.      */  
  44.     @Test  
  45.     public void testDeleteById() {  
  46.         String id = "5058184ec85607e42c4bfad8";  
  47.         getUserDao().deleteById(id);  
  48.     }  
  49.       
  50.     /** 
  51.      * 条件删除  
  52.      * <br>------------------------------<br> 
  53.      */  
  54.     @Test  
  55.     public void testDelete() {  
  56.         //删除年龄大于25的  
  57.         getUserDao().delete(new User(nullnull25));  
  58.     }  
  59.       
  60.     /** 
  61.      * 删除全部 
  62.      * <br>------------------------------<br> 
  63.      */  
  64.     @Test  
  65.     public void testDeleteAll() {  
  66.         getUserDao().deleteAll();  
  67.     }  
  68.       
  69.     /** 
  70.      * 修改  根据id修改 
  71.      * <br>------------------------------<br> 
  72.      */  
  73.     @Test  
  74.     public void testUpdateById() {  
  75.         getUserDao().updateById(new User("50581c08c856346f02e9842c""张三"100));  
  76.     }  
  77.       
  78.     /** 
  79.      * 修改多个 
  80.      * <br>------------------------------<br> 
  81.      */  
  82.     @Test  
  83.     public void update() {  
  84.         //修改年龄大于29岁的 姓名为“王五“  
  85.         User criteriaUser = new User(nullnull29);  
  86.         User user = new User(null"王五"39);  
  87.         getUserDao().update(criteriaUser, user);  
  88.     }  
  89.       
  90.     /** 
  91.      * 按主键查询, 如果不存在 返回null 
  92.      * <br>------------------------------<br> 
  93.      */  
  94.     @Test  
  95.     public void testFindById() {  
  96.         User user = getUserDao().findById("50581c08c856346f02e98425");  
  97.         print(user);  
  98.     }  
  99.       
  100.     /** 
  101.      * 查询全部 
  102.      * <br>------------------------------<br> 
  103.      */  
  104.     @Test  
  105.     public void testFindAll() {  
  106.         List<User> list = getUserDao().findAll();  
  107.         print(list);  
  108.     }  
  109.       
  110.     /** 
  111.      * 按条件查询 
  112.      * <br>------------------------------<br> 
  113.      */  
  114.     @Test  
  115.     public void testFind() {  
  116.         //查询25岁以上的, 分页  
  117.         User criteriaUser = new User(nullnull20);  
  118.         List<User> list = getUserDao().find(criteriaUser, 110);  
  119.         print(list);  
  120.     }  
  121.       
  122.     /** 
  123.      * 查询出来后  修改 
  124.      * <br>------------------------------<br> 
  125.      */  
  126.     @Test  
  127.     public void testFindAndModify() {  
  128.         User criteriaUser = new User("50581c08c856346f02e9842d"null0);  
  129.         User updateUser = new User(null"张三"100);  
  130.         updateUser = getUserDao().findAndModify(criteriaUser, updateUser);  
  131.         print(updateUser);  
  132.     }  
  133.       
  134.     /** 
  135.      * 查询出来后 删除 
  136.      * <br>------------------------------<br> 
  137.      */  
  138.     @Test  
  139.     public void testFindAndRemove() {  
  140.         User criteriaUser = new User("50581c08c856346f02e9842d"null0);  
  141.         criteriaUser = getUserDao().findAndRemove(criteriaUser);  
  142.         print(criteriaUser);  
  143.     }  
  144.       
  145.     /** 
  146.      * count 
  147.      * <br>------------------------------<br> 
  148.      */  
  149.     @Test  
  150.     public void testCount() {  
  151.         User criteriaUser = new User(null"test"0);  
  152.         long count = getUserDao().count(criteriaUser);  
  153.         print(count);  
  154.     }  
  155.       
  156.     public void print(Object object) {  
  157.         if (object == null || !(object instanceof Collection)) {  
  158.             System.out.println(object);  
  159.             return;  
  160.         }  
  161.         List<?> list = (List<?>) object;  
  162.         for (Object obj : list) {  
  163.             System.out.println(obj);  
  164.         }  
  165.     }  
  166.       
  167.     public IUserDao getUserDao() {  
  168.         String configLocations = "applicationContext.xml";  
  169.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocations);  
  170.         IUserDao userDao = applicationContext.getBean("userDao", IUserDao.class);  
  171.         return userDao;  
  172.     }  
  173. }  
      摘自:http://blog.csdn.net/java2000_wl/article/details/7983547
posted @ 2014-04-01 10:27  study2013  阅读(1554)  评论(0编辑  收藏  举报