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

本文探讨了将MySQL替换为MongoDB的可能性,并分享了一个实际案例:通过Spring框架集成MongoDB进行CRUD操作的全过程,包括配置文件设置及关键Java代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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. <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  12. <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
  13. <!-- <constructor-arg name="mongoConverter" ref="mappingConverter" /> -->
  14. </bean>
  15. </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. <!-- 扫描注解Bean -->
  11. <context:component-scan base-package="com.mkfree.**.service">
  12. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  13. </context:component-scan>
  14. <context:component-scan base-package="com.mkfree.**.dao">
  15. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  16. </context:component-scan>
  17. </beans>

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

MongodbBaseDao.java

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值