spring MongoDB 集成crud操作(简单封装)

oyhk 学习笔记

这两天一直在学习mongodb,由于我的博客网站想把mysql替换成mongodb,为什么会有这样的冲动,我通过收集一些资料,关于mongodb 跟 mysql 的对比...发现性能上mongodb比上mysql是高出很多倍...无论是增,删,修,查的操作.....都比mysql效率好...但是,我也看到,mongodb是文档型数据库...做一些高级查询的时候就可能产生麻烦了..特别是做银行的数据操作时,如果出错..没得事务回滚...这些都是比较严重的问题...

分析过博客网站这整个系统,觉得还是比较适合用mongodb...对于一些表与表的关联查询,我可以用程序上去解决(这部分可能就麻烦了些,不过没关系)...所以我决定使用mongodb

 更详细请下载源代码:http://blog.mkfree.com/posts/46

下面:spring MongoDB 集成crud操作(简单封装) 开始正题了,同样也是pom.xml首先把项目的依赖都管理好,这次一样用junit用来做action的动作触发,看看项目结构图:

spring MongoDB 集成crud操作(简单封装)

pom.xml

package com.mkfree.framework.common.mongodb;  
  
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;  
  
public abstract class MongodbBaseDao{  
  
    /** 
     * spring mongodb 集成操作类  
     */  
    protected MongoTemplate mongoTemplate;  
  
    /** 
     * 通过条件查询实体(集合) 
     *  
     * @param query 
     */  
    public Listfind(Query query) {  
        return mongoTemplate.find(query, this.getEntityClass());  
    }  
  
    /** 
     * 通过一定的条件查询一个实体 
     *  
     * @param query 
     * @return 
     */  
    public T findOne(Query query) {  
        return mongoTemplate.findOne(query, this.getEntityClass());  
    }  
  
    /** 
     * 通过条件查询更新数据 
     *  
     * @param query 
     * @param update 
     * @return 
     */  
    public void update(Query query, Update update) {  
        mongoTemplate.upsert(query, update, this.getEntityClass());  
    }  
  
    /** 
     * 保存一个对象到mongodb 
     *  
     * @param bean 
     * @return 
     */  
    public T save(T bean) {  
        mongoTemplate.save(bean);  
        return bean;  
    }  
  
    /** 
     * 通过ID获取记录 
     *  
     * @param id 
     * @return 
     */  
    public T get(String id) {  
        return mongoTemplate.findById(id, this.getEntityClass());  
    }  
  
    /** 
     * 通过ID获取记录,并且指定了集合名(表的意思) 
     *  
     * @param id 
     * @param collectionName 
     *            集合名 
     * @return 
     */  
    public T get(String id, String collectionName) {  
        return mongoTemplate.findById(id, this.getEntityClass(), collectionName);  
    }  
  
    /** 
     * 获取需要操作的实体类class 
     *  
     * @return 
     */  
    protected abstract ClassgetEntityClass();  
  
    /** 
     * 注入mongodbTemplate 
     *  
     * @param mongoTemplate 
     */  
    protected abstract void setMongoTemplate(MongoTemplate mongoTemplate);  
}  

 ArticleDao.java

package com.mkfree.blog.dao;  
  
import static org.springframework.data.mongodb.core.query.Criteria.where;  
import static org.springframework.data.mongodb.core.query.Query.query;  
import static org.springframework.data.mongodb.core.query.Update.update;  
  
import java.util.Map;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.beans.factory.annotation.Qualifier;  
import org.springframework.data.mongodb.core.MongoTemplate;  
import org.springframework.data.mongodb.core.query.Criteria;  
import org.springframework.data.mongodb.core.query.Query;  
import org.springframework.stereotype.Repository;  
  
import com.mkfree.blog.domain.Article;  
import com.mkfree.framework.common.mongodb.MongodbBaseDao;  
  
/** 
 * DAO层操作类 
 *  
 * @author oyhk 
 *  
 *         2013-1-21下午1:57:14 
 */  
@SuppressWarnings("static-access")  
@Repository("ArticleDao")  
public class ArticleDao extends MongodbBaseDao{  
  
    /** 
     * 通过条件去查询 
     *  
     * @return 
     */  
    public Article findOne(Map params) {  
        Query query = new Query();  
        Criteria criteria = new Criteria();  
        criteria.where("id").is(params.get("id"));  
        query.addCriteria(criteria);  
        return super.findOne(query);  
    }  
  
    /** 
     * 暂时通过ID去修改title 
     *  
     * @param id 
     * @param params 
     */  
    public void updateEntity(String id, Map params) {  
        super.updateEntity(query(where("id").is(id)), update("title", params.get("title")));  
    }  
  
    @Autowired  
    @Qualifier("mongoTemplate")  
    @Override  
    protected void setMongoTemplate(MongoTemplate mongoTemplate) {  
        super.mongoTemplate = mongoTemplate;  
    }  
  
    @Override  
    protected ClassgetEntityClass() {  
        return Article.class;  
    }  
  
}  

 Article.java

package com.mkfree.blog.domain;  
  
/** 
 * 博客实体类 
 *  
 * @author hk 2012-11-1 下午10:55:38 
 */  
public class Posts {  
    private String id;// 博客ID  
    private String title;// 博客标题  
    private String content;// 博客内容  
  
    public String getId() {  
        return id;  
    }  
  
    public void setId(String id) {  
        this.id = id;  
    }  
  
    public String getTitle() {  
        return title;  
    }  
  
    public void setTitle(String title) {  
        this.title = title;  
    }  
  
    public String getContent() {  
        return content;  
    }  
  
    public void setContent(String content) {  
        this.content = content;  
    }  
  
}  

 ArticleService.java

package com.mkfree.blog.service;  
  
import java.util.Map;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  
  
import com.mkfree.blog.dao.ArticleDao;  
import com.mkfree.blog.domain.Article;  
  
@Service("articleService")  
public class ArticleService {  
  
    @Autowired  
    private ArticleDao articleDao;  
  
    public Article findByid(String id) {  
        return (Article) articleDao.get(id);  
    }  
  
    public Article findOne(Map params) {  
        return this.articleDao.findOne(params);  
    }  
  
    public Article save(Article bean) {  
        return (Article) articleDao.save(bean);  
    }  
  
    /** 
     * 暂时只是固定去修改,会有下一篇博客,写高级修改... 
     */  
    public void update(String id, Map params) {  
        this.articleDao.updateEntity(id, params);  
    }  
}  

 ArticleController.java

package com.mkfree.blog.action;  
  
import java.util.HashMap;  
import java.util.Map;  
  
import org.junit.BeforeClass;  
import org.junit.Test;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
import com.mkfree.blog.domain.Article;  
import com.mkfree.blog.service.ArticleService;  
  
public class ArticleController {  
  
    private static ApplicationContext app;  
    private static ArticleService articleService;  
  
    @Test  
    public void save() {  
        Article a = new Article();  
        a.setTitle("mongodb开始实战");  
        a.setContent("mongodb开始实战..内容");  
        articleService.save(a);  
        System.out.println(a);  
    }  
  
    @Test  
    public void findArticle() {  
        Article a = articleService.findByid("50fd0c36bc40ceec1a44308b");  
        System.out.println(a);  
    }  
  
    @Test  
    public void update() {  
        Map params = new HashMap();  
        params.put("title", "修改内容...");  
        articleService.update("50fe23e6bc402ee4051f90b8", params);  
    }  
  
    @BeforeClass  
    public static void initSpring() {  
        app = new ClassPathXmlApplicationContext(new String[] { "classpath:spring/framework-context.xml",  
                "classpath:spring/mongodb.xml" });  
        articleService = (ArticleService) app.getBean("articleService");  
    }  
}  

 源代码下载:http://blog.mkfree.com/posts/46

 本文章来自: http://blog.mkfree.com/posts/46