mongodb--与spring整合

一、spring-data-mongodb

  Spring Data是Spring专门用来数据处理的一个子项目,Spring Data除了spring-data-mongodb之外还包括spring-data-jp、spring-data-redis等项目。spring-data-mongodb就是针对mongodb的一个项目。通过它我们可以对nongodb进行操作。spring-data-mongodb的项目地址为:http://projects.spring.io/spring-data-mongodb/ 。

二、实例

  例子使用maven构建并使用spring-test运行。

  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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yichun.test</groupId>
    <artifactId>test_yichun</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>test_yichun</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.11</junit.version>
        <spring.version>4.1.1.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.12.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.6.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

  spring-config-mongodb.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:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="
    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.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <mongo:mongo host="127.0.0.1" port="27017" />
    <mongo:db-factory dbname="mongotest" mongo-ref="mongo" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </bean>
</beans>

  Person.java 对应于保存的文档  

package com.yichun.test.test_yichun;

public class Person {

    private String id;
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

  MongoTest 主运行类

  1 package com.yichun.test.test_yichun;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import javax.annotation.Resource;
  7 
  8 import org.junit.Test;
  9 import org.junit.runner.RunWith;
 10 import org.springframework.data.domain.Sort;
 11 import org.springframework.data.domain.Sort.Direction;
 12 import org.springframework.data.mongodb.core.FindAndModifyOptions;
 13 import org.springframework.data.mongodb.core.MongoTemplate;
 14 import org.springframework.data.mongodb.core.query.Criteria;
 15 import org.springframework.data.mongodb.core.query.Query;
 16 import org.springframework.data.mongodb.core.query.Update;
 17 import org.springframework.test.context.ContextConfiguration;
 18 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 19 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 20 
 21 import com.mongodb.WriteResult;
 22 
 23 @RunWith(SpringJUnit4ClassRunner.class)
 24 @ContextConfiguration(locations = "classpath:spring-config-mongodb.xml")
 25 public class MongoTest extends AbstractJUnit4SpringContextTests {
 26 
 27     @Resource
 28     private MongoTemplate mongoTemplate;
 29 
 30     @Test
 31     public void testAddDoc() {
 32         Person p = new Person("Joe", 34);
 33         Person p2 = new Person("1001", "Joe", 34);
 34         Person p11 = new Person("1011", "zhangsan", 20);
 35         Person p12 = new Person("1012", "zhangsan2", 21);
 36         Person p13 = new Person("1013", "zhangsan3", 23);
 37         List<Person> list = new ArrayList<Person>();
 38         list.add(p11);
 39         list.add(p12);
 40         list.add(p13);
 41         this.mongoTemplate.insert(p);// 默认保存在person集合中(与类名称一致)
 42         this.mongoTemplate.insert(p2, "person2");// 指定保存在person2集合中
 43         this.mongoTemplate.insertAll(list);// 默认保存在person集合中(与类名称一致)
 44         // mongoTemplate.insert(list, collectionName);//指定保存的集合
 45         // mongoTemplate.insert(list, Person.class);// 默认保存在person集合中(与类名称一致)
 46     }
 47 
 48     @Test
 49     public  void testFindDoc() {
 50         // 根据id查询,此id为mongo生成的id
 51         Person person = this.mongoTemplate.findById("1011", Person.class);
 52         System.out.println(person);
 53 
 54         // 使用query对象查询
 55         Query query = new Query(Criteria.where("age").is(34));
 56         person = this.mongoTemplate.findOne(query, Person.class);
 57         System.out.println(person);
 58 
 59         // 使用query对象查询列表
 60         query = new Query(Criteria.where("age").lt(30)).// age小于30
 61                 with(new Sort(Direction.ASC, "age"));// age 升序
 62         // query.with(Pageable );//可分页查询
 63 
 64         List<Person> list = this.mongoTemplate.find(query.with(new Sort(Direction.ASC, "age")), Person.class);
 65         System.out.println(list);
 66     }
 67     
 68     @Test
 69     public void testUpdateDoc() {
 70         // age为34的person,age加1
 71         Query query = new Query(Criteria.where("id").is(1011));
 72         Update update = new Update().inc("age", 1);
 73         Person p = this.mongoTemplate.findAndModify(query, update, Person.class);
 74         System.out.println(p);
 75 
 76         p = this.mongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Person.class);// returnNew(true)将更新后的对象返回
 77         System.out.println(p);
 78 
 79         // 将age为21的name改成zhangsan22,如果有多个age为21的,则只改变第一个
 80         query = new Query(Criteria.where("age").is(21));
 81         update = new Update().set("name", "zhangsan22");
 82         WriteResult result = this.mongoTemplate.updateFirst(query, update, Person.class);
 83         System.out.println(result);
 84 
 85         // 将age为21的name改成zhangsan22,如果有多个age为21的,全部更新
 86         result = mongoTemplate.upsert(query, update, Person.class);
 87         System.out.println(result);
 88     }
 89     
 90     
 91     @Test
 92     public void testRemoveDoc(){
 93         Query query = new Query(Criteria.where("age").is(35));
 94         // mongoTemplate.findAndRemove(query, Person.class);//删除文档
 95         // mongoTemplate.findAndRemove(query, Person.class,
 96         // collectionName)//删除指定集合内的文档
 97         Person person = this.mongoTemplate.findOne(query, Person.class);
 98         WriteResult result = this.mongoTemplate.remove(person);
 99         System.out.println(result);
100         this.mongoTemplate.remove(query, Person.class);// 根据query对象删除文档
101 
102         // mongoTemplate.remove(person, collection);//从指定的集合中删除文档
103         // mongoTemplate.remove(query, collectionName);//从指定的集合中根据query对象删除文档
104         // mongoTemplate.remove(query, entityClass, collectionName)//从指定的集合中根据query对象和class类型删除文档
105 
106     }
107     
108 }

posted on 2014-12-09 21:23  烟火_  阅读(4815)  评论(0编辑  收藏  举报

导航