`
lvwenwen
  • 浏览: 926450 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

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的动作触发,看看项目结构图:

pom.xml

 

Xml代码  收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.mkfree</groupId>  
  5.     <artifactId>Mongodb</artifactId>  
  6.     <version>0.0.1-SNAPSHOT</version>  
  7.     <dependencies>  
  8.         <dependency>  
  9.             <groupId>org.springframework.data</groupId>  
  10.             <artifactId>spring-data-mongodb</artifactId>  
  11.             <version>1.0.3.RELEASE</version>  
  12.         </dependency>  
  13.         <dependency>  
  14.             <groupId>junit</groupId>  
  15.             <artifactId>junit</artifactId>  
  16.             <version>4.6</version>  
  17.         </dependency>  
  18.     </dependencies>  
  19.     <repositories>  
  20.         <repository>  
  21.             <id>spring-release</id>  
  22.             <name>Spring Maven Release Repository</name>  
  23.             <url>http://repo.springsource.org/libs-release</url>  
  24.         </repository>  
  25.     </repositories>  
  26. </project>  

 spring 配置文件:

 

mongodb.xml

 

Xml代码  收藏代码
  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" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:mongo="http://www.springframework.org/schema/data/mongo"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd  
  6. http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.1.xsd  
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  8.     <!-- Default bean name is 'mongo' -->  
  9.     <mongo:mongo host="127.0.0.1" port="27017" />  
  10.     <mongo:db-factory dbname="database" mongo-ref="mongo" />  
  11.       
  12.     <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
  13.         <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />  
  14.         <!-- <constructor-arg name="mongoConverter" ref="mappingConverter" /> -->  
  15.     </bean>  
  16. </beans>  

 framework-context.xml

 

 

Xml代码  收藏代码
  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" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="  
  6.        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  7.        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
  8.        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
  9.        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">  
  10.   
  11.     <!-- 扫描注解Bean -->  
  12.     <context:component-scan base-package="com.mkfree.**.service">  
  13.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />  
  14.     </context:component-scan>  
  15.     <context:component-scan base-package="com.mkfree.**.dao">  
  16.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />  
  17.     </context:component-scan>  
  18.       
  19. </beans>  

 这样就配置成功了..看下面的java代码

 

MongodbBaseDao.java

 

Java代码  收藏代码
  1. package com.mkfree.framework.common.mongodb;  
  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. public abstract class MongodbBaseDao{  
  10.   
  11.     /** 
  12.      * spring mongodb 集成操作类  
  13.      */  
  14.     protected MongoTemplate mongoTemplate;  
  15.   
  16.     /** 
  17.      * 通过条件查询实体(集合) 
  18.      *  
  19.      * @param query 
  20.      */  
  21.     public Listfind(Query query) {  
  22.         return mongoTemplate.find(query, this.getEntityClass());  
  23.     }  
  24.   
  25.     /** 
  26.      * 通过一定的条件查询一个实体 
  27.      *  
  28.      * @param query 
  29.      * @return 
  30.      */  
  31.     public T findOne(Query query) {  
  32.         return mongoTemplate.findOne(query, this.getEntityClass());  
  33.     }  
  34.   
  35.     /** 
  36.      * 通过条件查询更新数据 
  37.      *  
  38.      * @param query 
  39.      * @param update 
  40.      * @return 
  41.      */  
  42.     public void update(Query query, Update update) {  
  43.         mongoTemplate.upsert(query, update, this.getEntityClass());  
  44.     }  
  45.   
  46.     /** 
  47.      * 保存一个对象到mongodb 
  48.      *  
  49.      * @param bean 
  50.      * @return 
  51.      */  
  52.     public T save(T bean) {  
  53.         mongoTemplate.save(bean);  
  54.         return bean;  
  55.     }  
  56.   
  57.     /** 
  58.      * 通过ID获取记录 
  59.      *  
  60.      * @param id 
  61.      * @return 
  62.      */  
  63.     public T get(String id) {  
  64.         return mongoTemplate.findById(id, this.getEntityClass());  
  65.     }  
  66.   
  67.     /** 
  68.      * 通过ID获取记录,并且指定了集合名(表的意思) 
  69.      *  
  70.      * @param id 
  71.      * @param collectionName 
  72.      *            集合名 
  73.      * @return 
  74.      */  
  75.     public T get(String id, String collectionName) {  
  76.         return mongoTemplate.findById(id, this.getEntityClass(), collectionName);  
  77.     }  
  78.   
  79.     /** 
  80.      * 获取需要操作的实体类class 
  81.      *  
  82.      * @return 
  83.      */  
  84.     protected abstract ClassgetEntityClass();  
  85.   
  86.     /** 
  87.      * 注入mongodbTemplate 
  88.      *  
  89.      * @param mongoTemplate 
  90.      */  
  91.     protected abstract void setMongoTemplate(MongoTemplate mongoTemplate);  
  92. }  

 ArticleDao.java

 

 

Java代码  收藏代码
  1. package com.mkfree.blog.dao;  
  2.   
  3. import static org.springframework.data.mongodb.core.query.Criteria.where;  
  4. import static org.springframework.data.mongodb.core.query.Query.query;  
  5. import static org.springframework.data.mongodb.core.query.Update.update;  
  6.   
  7. import java.util.Map;  
  8.   
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.beans.factory.annotation.Qualifier;  
  11. import org.springframework.data.mongodb.core.MongoTemplate;  
  12. import org.springframework.data.mongodb.core.query.Criteria;  
  13. import org.springframework.data.mongodb.core.query.Query;  
  14. import org.springframework.stereotype.Repository;  
  15.   
  16. import com.mkfree.blog.domain.Article;  
  17. import com.mkfree.framework.common.mongodb.MongodbBaseDao;  
  18.   
  19. /** 
  20.  * DAO层操作类 
  21.  *  
  22.  * @author oyhk 
  23.  *  
  24.  *         2013-1-21下午1:57:14 
  25.  */  
  26. @SuppressWarnings("static-access")  
  27. @Repository("ArticleDao")  
  28. public class ArticleDao extends MongodbBaseDao{  
  29.   
  30.     /** 
  31.      * 通过条件去查询 
  32.      *  
  33.      * @return 
  34.      */  
  35.     public Article findOne(Map params) {  
  36.         Query query = new Query();  
  37.         Criteria criteria = new Criteria();  
  38.         criteria.where("id").is(params.get("id"));  
  39.         query.addCriteria(criteria);  
  40.         return super.findOne(query);  
  41.     }  
  42.   
  43.     /** 
  44.      * 暂时通过ID去修改title 
  45.      *  
  46.      * @param id 
  47.      * @param params 
  48.      */  
  49.     public void updateEntity(String id, Map params) {  
  50.         super.updateEntity(query(where("id").is(id)), update("title", params.get("title")));  
  51.     }  
  52.   
  53.     @Autowired  
  54.     @Qualifier("mongoTemplate")  
  55.     @Override  
  56.     protected void setMongoTemplate(MongoTemplate mongoTemplate) {  
  57.         super.mongoTemplate = mongoTemplate;  
  58.     }  
  59.   
  60.     @Override  
  61.     protected ClassgetEntityClass() {  
  62.         return Article.class;  
  63.     }  
  64.   
  65. }  

 Article.java

 

 

Java代码  收藏代码
  1. package com.mkfree.blog.domain;  
  2.   
  3. /** 
  4.  * 博客实体类 
  5.  *  
  6.  * @author hk 2012-11-1 下午10:55:38 
  7.  */  
  8. public class Posts {  
  9.     private String id;// 博客ID  
  10.     private String title;// 博客标题  
  11.     private String content;// 博客内容  
  12.   
  13.     public String getId() {  
  14.         return id;  
  15.     }  
  16.   
  17.     public void setId(String id) {  
  18.         this.id = id;  
  19.     }  
  20.   
  21.     public String getTitle() {  
  22.         return title;  
  23.     }  
  24.   
  25.     public void setTitle(String title) {  
  26.         this.title = title;  
  27.     }  
  28.   
  29.     public String getContent() {  
  30.         return content;  
  31.     }  
  32.   
  33.     public void setContent(String content) {  
  34.         this.content = content;  
  35.     }  
  36.   
  37. }  

 ArticleService.java

 

 

Java代码  收藏代码
  1. package com.mkfree.blog.service;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.stereotype.Service;  
  7.   
  8. import com.mkfree.blog.dao.ArticleDao;  
  9. import com.mkfree.blog.domain.Article;  
  10.   
  11. @Service("articleService")  
  12. public class ArticleService {  
  13.   
  14.     @Autowired  
  15.     private ArticleDao articleDao;  
  16.   
  17.     public Article findByid(String id) {  
  18.         return (Article) articleDao.get(id);  
  19.     }  
  20.   
  21.     public Article findOne(Map params) {  
  22.         return this.articleDao.findOne(params);  
  23.     }  
  24.   
  25.     public Article save(Article bean) {  
  26.         return (Article) articleDao.save(bean);  
  27.     }  
  28.   
  29.     /** 
  30.      * 暂时只是固定去修改,会有下一篇博客,写高级修改... 
  31.      */  
  32.     public void update(String id, Map params) {  
  33.         this.articleDao.updateEntity(id, params);  
  34.     }  
  35. }  

 ArticleController.java

 

 

Java代码  收藏代码
  1. package com.mkfree.blog.action;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import org.junit.BeforeClass;  
  7. import org.junit.Test;  
  8. import org.springframework.context.ApplicationContext;  
  9. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  10.   
  11. import com.mkfree.blog.domain.Article;  
  12. import com.mkfree.blog.service.ArticleService;  
  13.   
  14. public class ArticleController {  
  15.   
  16.     private static ApplicationContext app;  
  17.     private static ArticleService articleService;  
  18.   
  19.     @Test  
  20.     public void save() {  
  21.         Article a = new Article();  
  22.         a.setTitle("mongodb开始实战");  
  23.         a.setContent("mongodb开始实战..内容");  
  24.         articleService.save(a);  
  25.         System.out.println(a);  
  26.     }  
  27.   
  28.     @Test  
  29.     public void findArticle() {  
  30.         Article a = articleService.findByid("50fd0c36bc40ceec1a44308b");  
  31.         System.out.println(a);  
  32.     }  
  33.   
  34.     @Test  
  35.     public void update() {  
  36.         Map params = new HashMap();  
  37.         params.put("title""修改内容...");  
  38.         articleService.update("50fe23e6bc402ee4051f90b8", params);  
  39.     }  
  40.   
  41.     @BeforeClass  
  42.     public static void initSpring() {  
  43.         app = new ClassPathXmlApplicationContext(new String[] { "classpath:spring/framework-context.xml",  
  44.                 "classpath:spring/mongodb.xml" });  
  45.         articleService = (ArticleService) app.getBean("articleService");  
  46.     }  
  47. }  

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

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

                      http://oyhk.iteye.com/blog/1774090

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics