zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Linux搭建iscsi服务,客户端(Linux&Win XP)挂载使用
    SecucreCRT安装与破解
    最全的HCIA-R&S实验笔记
    AtCoder Grand Contest 036
    Comet OJ CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)
    2019慈溪集训小记
    Codeforces Round #573 (Div. 1)
    Comet OJ
    Codeforces Round #576 (Div. 1)
    Codechef August Challenge 2019 Division 2
  • 原文地址:https://www.cnblogs.com/always-online/p/4154089.html
Copyright © 2011-2022 走看看