zoukankan      html  css  js  c++  java
  • spring集成mongodb封装的简单的CRUD

    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)

    <?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">  
       
      <mongo:db-factory id="mongoDbFactory"
                      host="${mongo.host}"
                      port="${mongo.port}"
                      dbname="${mongo.dbname}"
                      username="${mongo.username}"
                      password="${database.password}"/>  
      <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>  
        </bean>
     </beans>  


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

            接下来就是CRUD封装类

    package cn.sunsharp.alibaba.core.mongo;
    
    import java.util.List;
    
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    
    import cn.sunsharp.alibaba.core.Page;
    
    public interface BaseMongoDAO<T> {
    
    	/**
    	 * 通过条件查询实体(集合)
    	 * 
    	 * @param query
    	 */
    	public List<T> find(Query query) ;
    
    	/**
    	 * 通过一定的条件查询一个实体
    	 * 
    	 * @param query
    	 * @return
    	 */
    	public T findOne(Query query) ;
    
    	/**
    	 * 通过条件查询更新数据
    	 * 
    	 * @param query
    	 * @param update
    	 * @return
    	 */
    	public void update(Query query, Update update) ;
    
    	/**
    	 * 保存一个对象到mongodb
    	 * 
    	 * @param entity
    	 * @return
    	 */
    	public T save(T entity) ;
    
    	/**
    	 * 通过ID获取记录
    	 * 
    	 * @param id
    	 * @return
    	 */
    	public T findById(String id) ;
    
    	/**
    	 * 通过ID获取记录,并且指定了集合名(表的意思)
    	 * 
    	 * @param id
    	 * @param collectionName
    	 *            集合名
    	 * @return
    	 */
    	public T findById(String id, String collectionName) ;
    	
    	/**
    	 * 分页查询
    	 * @param page
    	 * @param query
    	 * @return
    	 */
    	public Page<T> findPage(Page<T> page,Query query);
    	
    	/**
    	 * 求数据总和
    	 * @param query
    	 * @return
    	 */
    	public long count(Query query);
    	
    }
    


    实现:

    package cn.sunsharp.alibaba.core.mongo.impl;
    
    import java.util.List;
    
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    
    import cn.sunsharp.alibaba.core.Page;
    import cn.sunsharp.alibaba.core.ReflectionUtils;
    import cn.sunsharp.alibaba.core.mongo.BaseMongoDAO;
    
    public abstract class BaseMongoDAOImpl<T> implements BaseMongoDAO<T>{
    
    	private static final int DEFAULT_SKIP = 0;
    	private static final int DEFAULT_LIMIT = 200;
    	
    	/**
    	 * spring mongodb 集成操作类 
    	 */
    	protected MongoTemplate mongoTemplate;
    
    	@Override
    	public List<T> find(Query query) {
    		return mongoTemplate.find(query, this.getEntityClass());
    	}
    
    	@Override
    	public T findOne(Query query) {
    		return mongoTemplate.findOne(query, this.getEntityClass());
    	}
    
    	@Override
    	public void update(Query query, Update update) {
    		mongoTemplate.findAndModify(query, update, this.getEntityClass());
    	}
    
    	@Override
    	public T save(T entity) {
    		mongoTemplate.insert(entity);
    		return entity;
    	}
    
    	@Override
    	public T findById(String id) {
    		return mongoTemplate.findById(id, this.getEntityClass());
    	}
    
    	@Override
    	public T findById(String id, String collectionName) {
    		return mongoTemplate.findById(id, this.getEntityClass(), collectionName);
    	}
    	
    	@Override
    	public Page<T> findPage(Page<T> page,Query query){
    		long count = this.count(query);
    		page.setTotal(count);
    		int pageNumber = page.getPageNumber();
    		int pageSize = page.getPageSize();
    		query.skip((pageNumber - 1) * pageSize).limit(pageSize);
    		List<T> rows = this.find(query);
    		page.setRows(rows);
    		return page;
    	}
    	
    	@Override
    	public long count(Query query){
    		return mongoTemplate.count(query, this.getEntityClass());
    	}
    	
    
    	/**
    	 * 获取需要操作的实体类class
    	 * 
    	 * @return
    	 */
    	private Class<T> getEntityClass(){
    		return ReflectionUtils.getSuperClassGenricType(getClass());
    	}
    
    	/**
    	 * 注入mongodbTemplate
    	 * 
    	 * @param mongoTemplate
    	 */
    	protected abstract void setMongoTemplate(MongoTemplate mongoTemplate);
    
    }
    


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

           

  • 相关阅读:
    Servlet到底是单例还是多例你了解吗?
    Idea的一些调试技巧及设置todo
    Android如何使用so文件和Android studio中导入so
    Android 自定义控件之app标题栏的封装
    Android 动态添加删除ExpandableListView的item的例子
    Android 利用ListView制作带竖线的多彩表格
    Android EditText 改变边框颜色
    Android 使用Okhttp/Retrofit持久化cookie的简便方式
    Android 一个漂亮的Android Spinner
    Android 带清除功能的输入框控件EditText
  • 原文地址:https://www.cnblogs.com/riskyer/p/3328969.html
Copyright © 2011-2022 走看看