spring Data 整合MongoDB 的初级尝试

预先了解知识

1,spring data Jpa 基础

2,mongodb 基础

Spring data 是现代化的数据访问技术,他为传统的关系型数据库与nosql 数据库提供了统一的数据库访问接口。本博文写一写自己初次整合Spring data 与Mongodb 的过程 与 踩过的坑。

先总结一下自己出过的异常:

1,mongoClient 对象找不到,这个是由于低版本的mongodb-java 驱动中没有集成,最好采取新一点的版本

2,如果你提升了mongodb-java 的版本,却没有提升spring 的版本的话,会抛 mongoDbTemplete 对象不能创建的异常,

由于spring 3.x 到4.x 变化较大,mongoDb-java 驱动1.6以上要求spring 4.x。

这是本人第一次在开源中国上写博客,可能由于浏览器问题,感觉编辑器不太好用,代码整洁度不好,大家见谅

本实例采用maven 做依赖管理,以下是pom.xml 配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SpringDataMongo</groupId>
  <artifactId>pra</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>pra Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.8.2</version>  
            <scope>test</scope>  
        </dependency>  
        <dependency>  <!-- Spring framework -->  
	    	<groupId>org.springframework</groupId>
	  		<artifactId>spring-context</artifactId>
	   		<version>4.2.5.RELEASE</version>
       </dependency>
       <dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-core</artifactId>
	     <version>4.2.5.RELEASE</version>
     </dependency>
        <dependency><!-- spring data mongo 项目驱动 -->
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.7.2.RELEASE</version>
      </dependency>
       
       <dependency><!--  mongodb java 驱动-->
       		 <groupId>org.mongodb</groupId>
        	<artifactId>mongodb-driver</artifactId>
        	<version>3.2.2</version>
        </dependency>
   
        <dependency>  
            <groupId>cglib</groupId>  
            <artifactId>cglib</artifactId>  
            <version>2.2</version>  
        </dependency>    
  </dependencies>
  <build>
    <finalName>pra</finalName>
  </build>
</project>

接着是Spring bean.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mongo="http://www.springframework.org/schema/data/mongo"
	xmlns:repository="http://www.springframework.org/schema/data/repository"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		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.7.xsd
		http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!--开启注解扫描 --><!-- 扫描 com.yuhuan 及其子包 -->
<context:component-scan base-package="com.yuhuan"></context:component-scan>
<!-- 配置mongodb --><!-- port 配置mongodb 端口,默认是27017-->
   <mongo:db-factory id="mongoDbFactory" dbname="yuhuan" port="12345"/>
   <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory" />
        <property name="writeConcern" value="SAFE"></property>
   </bean>
</beans>

 接着是实体类 Person.java 和Address.java ,Person.java 通过注解加入到spring 容器中 Person 对象依赖Address 对象

package com.yuhuan.entity;


import org.springframework.data.annotation.Id;

import org.springframework.data.mongodb.core.mapping.Document;


@Document //Mongodb使用这个注解

public class Person {

@Id

private String id;

private String name;

private int age;

private Address address;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Address getAddress() {

return address;

}

public void setAddress(Address address) {

         this.address = address;

}

}

下面是Address类

package com.yuhuan.entity;

public class Address {
private String addr;
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getPro() {
return pro;
}
public void setPro(String pro) {
this.pro = pro;
}
private String pro;

}

}

服务层接口类

package com.yuhuan.repository;


import java.util.List;

import com.mongodb.WriteResult;

public interface UserRepository<T> {

public List<T> getAllObjects();

public void saveObject(T object);

public T getObject(String id);

public WriteResult updateObject(String id, String name);

public void deleteObject(String id);

public void createCollection();

public void dropCollection();

}

服务层接口实现类 用@repository 注解将其加入Spring 容器

package com.yuhuan.repository;

import java.util.List;


import javax.annotation.Resource;


import org.apache.catalina.User;

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.data.mongodb.core.query.Update;

import org.springframework.stereotype.Repository;


import com.mongodb.WriteResult;

import com.yuhuan.entity.Person;

@Repository

public class UserRepositoryImpl implements UserRepository<Person> {

@Resource

private MongoTemplate mongoTemplate;

        public List<Person> getAllObjects() {

return mongoTemplate.findAll(Person.class);

}

       public void saveObject(Person object) {

mongoTemplate.insert(object);

}

public Person getObject(String id) {

return mongoTemplate.findOne(new Query(Criteria.where("id").is(id)),

Person.class);

}

public WriteResult updateObject(String id, String name) {

return mongoTemplate.updateFirst(

new Query(Criteria.where("id").is(id)),

Update.update("name", name), Person.class); }

public void deleteObject(String id) {

mongoTemplate.remove(new Query(Criteria.where("id").is(id)),

Person.class);

}

       public void createCollection() {

if (!mongoTemplate.collectionExists(Person.class)) {

mongoTemplate.createCollection(Person.class);

}

}

public void dropCollection() {

if (mongoTemplate.collectionExists(Person.class)) {

mongoTemplate.dropCollection(Person.class);

}

}

}

最后就是我们的测试类,本例子只测试了添加对象的方法

package test01;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yuhuan.entity.Address;
import com.yuhuan.entity.Person;
import com.yuhuan.repository.UserRepositoryImpl;


public class Test01 {
public static void main(String[] args){
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
Person person=new Person();
person.setName("yuhuan");
person.setAge(20);
Address address=new Address();
address.setAddr("中国");
address.setPro("lalala");
person.setAddress(address);
UserRepositoryImpl userRepositoryImpl=(UserRepositoryImpl) ctx.getBean("userRepositoryImpl");
userRepositoryImpl.saveObject(person);

}
}


你可能感兴趣的:(spring,maven,mongodb,Data,整合)