`

MongoDB整合Spring 详细讲解(含代码)

 
阅读更多

写这篇文章也做了下思考,首先是本人技术欠佳。但就是喜欢研究一些东西。因为在此之前有很多的朋友已经写过类似的,很多我也看过,但是讲解的不够深入。对有些朋友提出的问题不能给出答案。在这里,我根据我目前的能力对其进行整理。并最终运行成功。

在测试过程中出现过一下问题:

1、org/springframework/data/mapping/context/MappingContextAware

2、src-resolve: Cannot resolve the name 'repository:repository' to a(n) 'type definition'

以上都是版本不匹配引起的。特别是第二个错误我看有些解决时候提到了jpa,但是我这里没有使用jpa后来我是把spring-data-commons的包替换了个版本就不出现了。

我先说下我的开发环境:

myeclipse 6.5

mongodb 2.0.8

spring 3.0.4 

最后就是下面2个(这两个版本不对就容易出现各种各样的,杂七杂八的问题) 这里我就给出我所采用的版本

spring-data-document

spring-data-commons

有所改变所有版本必须要对应好下面是jar下载地址 
http://www.springsource.org/spring-data/mongodb 
http://www.springsource.org/spring-data/commons

下载版本分别为:

spring-data-commons-dist-1.4.0.M1

spring-data-document-1.0.0.M2.zip
下面给出我工程的图片

 

然后就开始我们开发之旅吧!

首先新建application.xml配置文件

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <span style="font-size:18px;color:#3366ff;"><?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"    
  4.           xmlns:context="http://www.springframework.org/schema/context"    
  5.           xmlns:mongo="http://www.springframework.org/schema/data/mongo"    
  6.           xsi:schemaLocation="http://www.springframework.org/schema/context     
  7.           http://www.springframework.org/schema/context/spring-context-3.0.xsd     
  8.           http://www.springframework.org/schema/data/mongo     
  9.           http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd     
  10.           http://www.springframework.org/schema/beans     
  11.           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">     
  12.       
  13.         <mongo:mongo host="192.168.0.138" port="27017"/>  
  14.           
  15.           
  16.       
  17.        <bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">     
  18.         <constructor-arg ref="mongo"/>     
  19.         <constructor-arg name="databaseName" value="db"/>     
  20.         <constructor-arg name="defaultCollectionName" value="person" />     
  21.       </bean>     
  22.       
  23.      <bean id="personRepository" class="com.mongo.dao.impl.PersonRepository">     
  24.         <property name="mongoTemplate" ref="mongoTemplate"></property>     
  25.     </bean>     
  26.       
  27.      <context:annotation-config />  
  28.           
  29. </beans>   
  30.     </span>  


然后编写操作mongodb的接口

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <span style="font-size:18px;color:#3366ff;">/** 
  2.  * AbstractRepository.java 
  3.  * 版权所有(C) 2012  
  4.  * 创建:cuiran 2012-12-12 11:40:40 
  5.  */  
  6. package com.mongo.dao;  
  7.   
  8. import java.util.List;  
  9.   
  10. import com.mongo.bean.Person;  
  11.   
  12. /** 
  13.  * TODO 
  14.  * @author cuiran 
  15.  * @version TODO 
  16.  */  
  17. public interface AbstractRepository {  
  18.       
  19.     /** 
  20.      *  
  21.      *<b>function:</b>添加对象 
  22.      * @author cuiran 
  23.      * @createDate 2012-12-12 11:41:30 
  24.      */  
  25.     public void insert(Person person);   
  26.       
  27.     /** 
  28.      *  
  29.      *<b>function:</b>根据ID查找对象 
  30.      * @author cuiran 
  31.      * @createDate 2012-12-12 11:41:41 
  32.      */  
  33.     public Person findOne(String id);     
  34.     /** 
  35.      *  
  36.      *<b>function:</b>查询所有 
  37.      * @author cuiran 
  38.      * @createDate 2012-12-12 16:26:06 
  39.      */  
  40.     public List<Person> findAll();     
  41.       
  42.     public List<Person> findByRegex(String regex);  
  43.     /** 
  44.      *  
  45.      *<b>function:</b>删除指定的ID对象 
  46.      * @author cuiran 
  47.      * @createDate 2012-12-12 16:26:16 
  48.      */  
  49.     public void removeOne(String id);     
  50.     /** 
  51.      *  
  52.      *<b>function:</b>删除所有 
  53.      * @author cuiran 
  54.      * @createDate 2012-12-12 16:25:40 
  55.      */  
  56.     public void removeAll();     
  57.     /** 
  58.      * 通过ID找到并修改 
  59.      *<b>function:</b> 
  60.      * @author cuiran 
  61.      * @createDate 2012-12-12 16:25:51 
  62.      */  
  63.     public void findAndModify(String id);     
  64.   
  65.       
  66. }  
  67. </span>  


再写对应接口的实现类:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <span style="font-size:18px;color:#3366ff;">/** 
  2.  * PersonRepository.java 
  3.  * 版权所有(C) 2012  
  4.  * 创建:cuiran 2012-12-12 11:42:51 
  5.  */  
  6. package com.mongo.dao.impl;  
  7.   
  8. import java.util.List;  
  9. import java.util.regex.Pattern;  
  10.   
  11. import org.springframework.data.document.mongodb.MongoTemplate;  
  12. import org.springframework.data.document.mongodb.query.Criteria;  
  13. import org.springframework.data.document.mongodb.query.Query;  
  14. import org.springframework.data.document.mongodb.query.Update;  
  15. import com.mongo.bean.Person;  
  16. import com.mongo.dao.AbstractRepository;  
  17.   
  18. /** 
  19.  * TODO 
  20.  * @author cuiran 
  21.  * @version TODO 
  22.  */  
  23. public class PersonRepository implements AbstractRepository {  
  24.   
  25.       private MongoTemplate mongoTemplate;     
  26.   
  27.     /* (non-Javadoc) 
  28.      * @see com.mongo.dao.AbstractRepository#findAll() 
  29.      */  
  30.     @Override  
  31.     public List<Person> findAll() {  
  32.         // TODO Auto-generated method stub  
  33.         return getMongoTemplate().find(new Query(), Person.class);     
  34.   
  35.     }  
  36.   
  37.     /* (non-Javadoc) 
  38.      * @see com.mongo.dao.AbstractRepository#findAndModify(java.lang.String) 
  39.      */  
  40.     @Override  
  41.     public void findAndModify(String id) {  
  42.         // TODO Auto-generated method stub  
  43.         //new Query(Criteria.where("id").is(id)), new Update().inc("age", 3)  
  44.           
  45.         getMongoTemplate().updateFirst(new Query(Criteria.where("id").is(id)), new Update().inc("age"3));  
  46.   
  47.     }  
  48.   
  49.     /* (non-Javadoc) 
  50.      * @see com.mongo.dao.AbstractRepository#findByRegex(java.lang.String) 
  51.      */  
  52.     @Override  
  53.     public List<Person> findByRegex(String regex) {  
  54.         // TODO Auto-generated method stub  
  55.          Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);     
  56.           Criteria criteria = new Criteria("name").regex(pattern.toString());     
  57.             return getMongoTemplate().find(new Query(criteria), Person.class);     
  58.   
  59.     }  
  60.   
  61.     /* (non-Javadoc) 
  62.      * @see com.mongo.dao.AbstractRepository#findOne(java.lang.String) 
  63.      */  
  64.     @Override  
  65.     public Person findOne(String id) {  
  66.         // TODO Auto-generated method stub  
  67.          return getMongoTemplate().findOne(new Query(Criteria.where("id").is(id)), Person.class);     
  68.   
  69.     }  
  70.   
  71.     /* (non-Javadoc) 
  72.      * @see com.mongo.dao.AbstractRepository#insert(com.mongo.bean.Person) 
  73.      */  
  74.     @Override  
  75.     public void insert(Person person) {  
  76.         // TODO Auto-generated method stub  
  77.         getMongoTemplate().insert(person);     
  78.     }  
  79.   
  80.     /* (non-Javadoc) 
  81.      * @see com.mongo.dao.AbstractRepository#removeAll() 
  82.      */  
  83.     @Override  
  84.     public void removeAll() {  
  85.         // TODO Auto-generated method stub  
  86.         List<Person> list = this.findAll();     
  87.         if(list != null){     
  88.             for(Person person : list){     
  89.                 getMongoTemplate().remove(person);     
  90.             }     
  91.         }     
  92.   
  93.     }  
  94.   
  95.     /* (non-Javadoc) 
  96.      * @see com.mongo.dao.AbstractRepository#removeOne(java.lang.String) 
  97.      */  
  98.     @Override  
  99.     public void removeOne(String id) {  
  100.         // TODO Auto-generated method stub  
  101.         Criteria criteria = Criteria.where("id").in(id);     
  102.         if(criteria == null){     
  103.              Query query = new Query(criteria);     
  104.              if(query != null && getMongoTemplate().findOne(query, Person.class) != null)     
  105.                  getMongoTemplate().remove(getMongoTemplate().findOne(query, Person.class));     
  106.         }     
  107.   
  108.     }  
  109.   
  110.     /** 
  111.      * @return the mongoTemplate 
  112.      */  
  113.     public MongoTemplate getMongoTemplate() {  
  114.         return mongoTemplate;  
  115.     }  
  116.   
  117.     /** 
  118.      * @param mongoTemplate the mongoTemplate to set 
  119.      */  
  120.     public void setMongoTemplate(MongoTemplate mongoTemplate) {  
  121.         this.mongoTemplate = mongoTemplate;  
  122.     }  
  123.   
  124. }  
  125. </span>  

这里也给出对应Person对象代码

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <span style="font-size:18px;color:#3366ff;">/** 
  2.  * Person.java 
  3.  * 版权所有(C) 2012  
  4.  * 创建:cuiran 2012-12-12 11:37:16 
  5.  */  
  6. package com.mongo.bean;  
  7.   
  8. import java.io.Serializable;  
  9.   
  10. /** 
  11.  * TODO 
  12.  * @author cuiran 
  13.  * @version TODO 
  14.  */  
  15. public class Person implements Serializable {  
  16.   
  17.     /** 
  18.      *  
  19.      */  
  20.     private static final long serialVersionUID = 3617931430808763429L;  
  21.       
  22.     private String id;     
  23.     private String name;     
  24.     private int age;  
  25.     public Person() {  
  26.         super();  
  27.     }  
  28.     public Person(String id, String name, int age) {  
  29.         super();  
  30.         this.id = id;  
  31.         this.name = name;  
  32.         this.age = age;  
  33.     }  
  34.     /** 
  35.      * @return the id 
  36.      */  
  37.     public String getId() {  
  38.         return id;  
  39.     }  
  40.     /** 
  41.      * @param id the id to set 
  42.      */  
  43.     public void setId(String id) {  
  44.         this.id = id;  
  45.     }  
  46.     /** 
  47.      * @return the name 
  48.      */  
  49.     public String getName() {  
  50.         return name;  
  51.     }  
  52.     /** 
  53.      * @param name the name to set 
  54.      */  
  55.     public void setName(String name) {  
  56.         this.name = name;  
  57.     }  
  58.     /** 
  59.      * @return the age 
  60.      */  
  61.     public int getAge() {  
  62.         return age;  
  63.     }  
  64.     /** 
  65.      * @param age the age to set 
  66.      */  
  67.     public void setAge(int age) {  
  68.         this.age = age;  
  69.     }  
  70.     /** 
  71.      *  
  72.      * @param name 
  73.      * @param age 
  74.      */  
  75.     public Person(String name, int age) {  
  76.         super();  
  77.         this.name = name;  
  78.         this.age = age;  
  79.     }     
  80.   
  81.      public String toString() {     
  82.             return "Person[id="+id+",name="+name+",age="+age+"]";     
  83.         }     
  84.   
  85.   
  86. }  
  87. </span>  

最后写出我们的测试类开始进行测试

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <span style="font-size:18px;color:#3366ff;">/** 
  2.  * MongoTest.java 
  3.  * 版权所有(C) 2012  
  4.  * 创建:cuiran 2012-12-12 11:54:30 
  5.  */  
  6. package com.mongo.test;  
  7.   
  8. import java.util.List;  
  9.   
  10. import org.apache.commons.logging.Log;  
  11. import org.apache.commons.logging.LogFactory;  
  12. import org.springframework.context.ApplicationContext;  
  13. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  14.   
  15. import com.mongo.bean.Person;  
  16. import com.mongo.dao.AbstractRepository;  
  17. import com.mongo.dao.impl.PersonRepository;  
  18.   
  19.   
  20.   
  21. /** 
  22.  * TODO 
  23.  * @author cuiran 
  24.  * @version TODO 
  25.  */  
  26. public class MongoTest {  
  27.   
  28.     private static Log log = LogFactory.getLog(MongoTest.class.getName());  
  29.       
  30.     private  AbstractRepository pr=null;  
  31.       
  32.     /** 
  33.      *  
  34.      *<b>function:</b> 
  35.      * @author cuiran 
  36.      * @createDate 2012-12-12 16:08:02 
  37.      */  
  38.     public void init(){  
  39.          log.debug("开始启动");  
  40.          ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  
  41.           pr= (PersonRepository)ctx.getBean("personRepository");  
  42.            
  43.           
  44.           
  45.     }  
  46.     /** 
  47.      *  
  48.      *<b>function:</b>添加 
  49.      * @author cuiran 
  50.      * @createDate 2012-12-12 16:11:01 
  51.      */  
  52.     public void insert(){  
  53.           
  54.         Person p=new Person("cuiran",27);  
  55.          pr.insert(p);  
  56.          log.debug("添加成功");  
  57.     }  
  58.     /** 
  59.      *  
  60.      *<b>function:</b>根据输入的ID查找对象 
  61.      * @author cuiran 
  62.      * @createDate 2012-12-12 16:24:10 
  63.      */  
  64.     public void findOne(){  
  65.         String id="50c83cb552c2ceb0463177d6";  
  66.         Person p= pr.findOne(id);  
  67.         log.debug(p);  
  68.     }  
  69.       
  70.       
  71.     /** 
  72.      *  
  73.      *<b>function:</b>查询所有 
  74.      * @author cuiran 
  75.      * @createDate 2012-12-12 16:08:54 
  76.      */  
  77.     public void listAll(){  
  78.           
  79.         List<Person> list=pr.findAll();  
  80.         log.debug("查询结果如下:");  
  81.         for (Person p:list){  
  82.             log.debug(p.toString());  
  83.         }  
  84.           
  85.           
  86.     }  
  87.       
  88.     /** 
  89.      *  
  90.      *<b>function:</b>测试方法 
  91.      * @author cuiran 
  92.      * @createDate 2012-12-12 16:11:37 
  93.      */  
  94.     public void start(){  
  95.         init();  
  96.           
  97.         //insert();  
  98.         //listAll();  
  99.           
  100.         findOne();  
  101.     }  
  102.       
  103.     /** 
  104.      *<b>function:</b>main函数 
  105.      * @author cuiran 
  106.      * @createDate 2012-12-12 11:54:30 
  107.      */  
  108.     public static void main(String[] args) {  
  109.         // TODO Auto-generated method stub  
  110.         MongoTest t=new MongoTest();  
  111.         t.start();  
  112.     }  
  113.   
  114. }  
  115. </span>  


运行出现一下日志,就没什么问题。

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <span style="font-size:18px;color:#3366ff;">2012-12-12 16:23:59:DEBUG com.mongo.test.MongoTest - 开始启动  
  2. 2012-12-12 16:23:59:INFO org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@253498: startup date [Wed Dec 12 16:23:59 CST 2012]; root of context hierarchy  
  3. 2012-12-12 16:23:59:INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]  
  4. 2012-12-12 16:24:00:INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@12a0f6c: defining beans [mongo,mongoTemplate,personRepository,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor]; root of factory hierarchy  
  5. 2012-12-12 16:24:00:DEBUG com.mongo.test.MongoTest - Person[id=50c83cb552c2ceb0463177d6,name=cuiran,age=27]  
  6. </span>  


 

由于这些程序只是作为测试使用,对出现的问题, 欢迎留言咨询。谢谢大家。

分享到:
评论

相关推荐

    mongodb整合spring文档

    本文将详细介绍如何在Spring项目中整合MongoDB,并重点讲解配置文件的编写。 #### 二、所需依赖 为了实现Spring与MongoDB的整合,首先需要在项目的`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;org.mongodb ...

    Spring4 整合MongoDB详细讲解项目源码

    spring4 整合MongoDB详细讲解项目源码 Mongo DB 是目前在IT行业非常流行的一种非关系型数据库 NoSql 其灵活的数据存储方式备受当前IT从业人员的青睐 Mongo DB很好的实现了面向对象的思想 OO思想 在Mongo DB中 每一条...

    MongoDB整合Spring实例详细讲解(含代码)

    总之,MongoDB与Spring的整合涉及配置MongoDB连接、创建MongoTemplate实例,以及利用Spring Data MongoDB的Repository模式进行数据访问。正确配置和使用这些组件,可以帮助开发者快速构建高效、灵活的MongoDB驱动的...

    spring +mongodb

    Spring 和 MongoDB 是两个在现代Java开发中非常重要的技术。...在`springmvc_mongodb`这个项目中,你可能找到了关于如何在Spring MVC环境中配置和使用MongoDB的例子,这将有助于深入理解两者之间的整合。

    springboot-mybatis-druid-mongodb-demo.zip

    本文将详细讲解如何整合Springboot 2.0、Mybatis-Plus 3.1.0、MongoDB以及Druid多数据源配置,并提供一个实际运行通过的实例。这个压缩包"springboot-mybatis-druid-mongodb-demo.zip"包含了完整的代码示例,适合...

    springdata整合sprig+springmvc+maven分模块化搭建项目

    在本项目中,我们主要探讨的是如何利用Spring Data、Spring ...通过以上步骤,我们可以构建一个高效、模块化、易于扩展的Spring Data整合Spring+Spring MVC项目,这不仅有利于提高开发效率,也有利于后期的维护和升级。

    spring-framework doc文档

    它可能还会涵盖Spring Boot的快速启动方式,以及如何利用Maven或Gradle构建工具整合Spring。 2. **核心容器**:Spring的核心在于其IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)...

    SSM整合的例子,包括Mybatis、Spring、SpringMVC

    下面将详细讲解这三个框架的基本概念、整合过程以及相关知识点。 1. **Spring**:Spring 是一个开源的 Java 应用程序框架,核心功能包括依赖注入(DI)和面向切面编程(AOP)。DI使得对象之间的依赖关系可以通过...

    跟我学spring3

    《跟我学Spring3》是一本深入浅出的Spring框架学习指南,主要针对Spring 3.x版本进行详细讲解。Spring作为Java领域最流行的轻量级框架,它的应用广泛且功能强大,涵盖依赖注入、AOP(面向切面编程)、数据访问、Web...

    Spring_PDF

    标题 "Spring_PDF" 暗示我们关注的是与Spring框架相关的PDF文档,可能是某个教程、指南或技术文章的集合。...文件“SpringGuide.pdf”应该包含这些内容的详细讲解,是学习和提升Spring技术的宝贵资料。

    spring自己说说

    inclass”中,“01”可能是章节编号,暗示了文章可能逐步讲解Spring框架,而“sshchap04”可能指的是SSH(Struts + Spring + Hibernate)集成开发中的第四章内容,这可能涉及到Spring与Hibernate的整合,以及如何在...

    spring教程 电子书籍 介绍spring特点和应用

    16. **Spring与其他技术的集成**:讨论Spring与其他流行技术(如Redis、MongoDB等)的整合。 17. **最佳实践**:分享Spring开发的最佳实践,提高代码质量和可维护性。 18. **进阶主题**:深入研究Spring框架的高级...

    2018.02.Spring Boot 2.0 Cookbook 2nd

    书中将详细阐述如何配置Spring Security,实现用户认证、授权和OAuth2整合,确保应用的安全性。 在测试方面,Spring Boot提供了丰富的测试支持,包括单元测试、集成测试以及端到端测试。书中会教授如何编写这些测试...

    Spring高级之注解驱动开发视频教程

    视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 1、课程简介 Spring框架是一系列应用框架的核心,也可以说是整合其他应用框架的基座。同时还是SpringBoot的基础。在当下的市场开发环境中,...

    Spring Boot实战 ,丁雪丰 (译者)-最高清原版

    作者详细讲解了如何创建一个Spring Boot项目,从基本的“起步依赖”开始,通过Maven或Gradle构建系统引入必要的依赖。此外,书中还会介绍如何利用Spring Initializr在线生成项目模板,进一步提升开发效率。 Spring ...

    2019精通Spring Boot 42讲

    每个章节都会深入讲解一个主题,并通过实例代码展示如何实际应用。通过学习这套教程,开发者不仅可以掌握Spring Boot的基本用法,还能了解如何在实际项目中灵活运用,提升开发能力。无论是初学者还是有经验的开发者...

    Spring中文帮助文档

    此外,文档还会讲解Spring如何与其他技术结合,如Spring与Hibernate、MyBatis等持久层框架的整合,Spring Boot的使用,以及Spring Security对于应用安全的管理。Spring Boot简化了Spring应用的初始搭建以及开发过程...

    Pro Spring 5

    《Pro Spring 5》会讲解如何使用Spring Security来保护应用程序,包括认证、授权、CSRF防护和OAuth2整合等内容。 最后,本书还将涉及Spring测试,包括单元测试、集成测试以及端到端测试的最佳实践,帮助开发者确保...

Global site tag (gtag.js) - Google Analytics