spring集成mongodb封装的简单的CRUD

来源:互联网 发布:财神爷抢红包软件 编辑:程序博客网 时间:2024/05/16 10:28

1、什么是mongodb

        MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
mongoDB

  mongoDB

        MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

2、和spring集成

        最近公司的项目有用到mongodb,主要用于存储日志记录,所以研究了下它和spring的集成,并且做了个简单的CRUD的封装,首先用到的包是:

        spring-3.1.x以上的相关包(必须是3.1.x以上,否则集成之后运行会报错)

        spring-data-mongodb-1.3.0.M1.jar

        先看配置文件(spring-mongodb.xml)

[html] view plaincopyprint?
  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/context    
  8.           http://www.springframework.org/schema/context/spring-context-3.0.xsd    
  9.           http://www.springframework.org/schema/data/mongo    
  10.           http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd    
  11.           http://www.springframework.org/schema/beans    
  12.           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    
  13.      
  14.   <mongo:db-factory id="mongoDbFactory"  
  15.                   host="${mongo.host}"  
  16.                   port="${mongo.port}"  
  17.                   dbname="${mongo.dbname}"  
  18.                   username="${mongo.username}"  
  19.                   password="${database.password}"/>    
  20.   <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">    
  21.     <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>    
  22.     </bean>  
  23.  </beans>    

        其中:host为mongodb服务器地址,port为端口号,dbname为数据库名,username为mongodb用户名,password为mongodb密码,好了,全部配置就在这里。

        接下来就是CRUD封装类

[java] view plaincopyprint?
  1. package cn.sunsharp.alibaba.core.mongo;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.data.mongodb.core.query.Query;  
  6. import org.springframework.data.mongodb.core.query.Update;  
  7.   
  8. import cn.sunsharp.alibaba.core.Page;  
  9.   
  10. public interface BaseMongoDAO<T> {  
  11.   
  12.     /** 
  13.      * 通过条件查询实体(集合) 
  14.      *  
  15.      * @param query 
  16.      */  
  17.     public List<T> find(Query query) ;  
  18.   
  19.     /** 
  20.      * 通过一定的条件查询一个实体 
  21.      *  
  22.      * @param query 
  23.      * @return 
  24.      */  
  25.     public T findOne(Query query) ;  
  26.   
  27.     /** 
  28.      * 通过条件查询更新数据 
  29.      *  
  30.      * @param query 
  31.      * @param update 
  32.      * @return 
  33.      */  
  34.     public void update(Query query, Update update) ;  
  35.   
  36.     /** 
  37.      * 保存一个对象到mongodb 
  38.      *  
  39.      * @param entity 
  40.      * @return 
  41.      */  
  42.     public T save(T entity) ;  
  43.   
  44.     /** 
  45.      * 通过ID获取记录 
  46.      *  
  47.      * @param id 
  48.      * @return 
  49.      */  
  50.     public T findById(String id) ;  
  51.   
  52.     /** 
  53.      * 通过ID获取记录,并且指定了集合名(表的意思) 
  54.      *  
  55.      * @param id 
  56.      * @param collectionName 
  57.      *            集合名 
  58.      * @return 
  59.      */  
  60.     public T findById(String id, String collectionName) ;  
  61.       
  62.     /** 
  63.      * 分页查询 
  64.      * @param page 
  65.      * @param query 
  66.      * @return 
  67.      */  
  68.     public Page<T> findPage(Page<T> page,Query query);  
  69.       
  70.     /** 
  71.      * 求数据总和 
  72.      * @param query 
  73.      * @return 
  74.      */  
  75.     public long count(Query query);  
  76.       
  77. }  

实现:

[java] view plaincopyprint?
  1. package cn.sunsharp.alibaba.core.mongo.impl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.data.mongodb.core.MongoTemplate;  
  6. import org.springframework.data.mongodb.core.query.Query;  
  7. import org.springframework.data.mongodb.core.query.Update;  
  8.   
  9. import cn.sunsharp.alibaba.core.Page;  
  10. import cn.sunsharp.alibaba.core.ReflectionUtils;  
  11. import cn.sunsharp.alibaba.core.mongo.BaseMongoDAO;  
  12.   
  13. public abstract class BaseMongoDAOImpl<T> implements BaseMongoDAO<T>{  
  14.   
  15.     private static final int DEFAULT_SKIP = 0;  
  16.     private static final int DEFAULT_LIMIT = 200;  
  17.       
  18.     /** 
  19.      * spring mongodb 集成操作类  
  20.      */  
  21.     protected MongoTemplate mongoTemplate;  
  22.   
  23.     @Override  
  24.     public List<T> find(Query query) {  
  25.         return mongoTemplate.find(query, this.getEntityClass());  
  26.     }  
  27.   
  28.     @Override  
  29.     public T findOne(Query query) {  
  30.         return mongoTemplate.findOne(query, this.getEntityClass());  
  31.     }  
  32.   
  33.     @Override  
  34.     public void update(Query query, Update update) {  
  35.         mongoTemplate.findAndModify(query, update, this.getEntityClass());  
  36.     }  
  37.   
  38.     @Override  
  39.     public T save(T entity) {  
  40.         mongoTemplate.insert(entity);  
  41.         return entity;  
  42.     }  
  43.   
  44.     @Override  
  45.     public T findById(String id) {  
  46.         return mongoTemplate.findById(id, this.getEntityClass());  
  47.     }  
  48.   
  49.     @Override  
  50.     public T findById(String id, String collectionName) {  
  51.         return mongoTemplate.findById(id, this.getEntityClass(), collectionName);  
  52.     }  
  53.       
  54.     @Override  
  55.     public Page<T> findPage(Page<T> page,Query query){  
  56.         long count = this.count(query);  
  57.         page.setTotal(count);  
  58.         int pageNumber = page.getPageNumber();  
  59.         int pageSize = page.getPageSize();  
  60.         query.skip((pageNumber - 1) * pageSize).limit(pageSize);  
  61.         List<T> rows = this.find(query);  
  62.         page.setRows(rows);  
  63.         return page;  
  64.     }  
  65.       
  66.     @Override  
  67.     public long count(Query query){  
  68.         return mongoTemplate.count(query, this.getEntityClass());  
  69.     }  
  70.       
  71.   
  72.     /** 
  73.      * 获取需要操作的实体类class 
  74.      *  
  75.      * @return 
  76.      */  
  77.     private Class<T> getEntityClass(){  
  78.         return ReflectionUtils.getSuperClassGenricType(getClass());  
  79.     }  
  80.   
  81.     /** 
  82.      * 注入mongodbTemplate 
  83.      *  
  84.      * @param mongoTemplate 
  85.      */  
  86.     protected abstract void setMongoTemplate(MongoTemplate mongoTemplate);  
  87.   
  88. }  

这样,就完成了spring和mongodb的集成,其实很简单的。测试话就直接调用相关方法就可以了。。。
0 0
原创粉丝点击