spring集成mongodb封装的简单的CRUD

时间:2020-12-11 04:18:34

1、什么是mongodb

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

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的集成,其实很简单的。测试话就直接调用相关方法就可以了。。。