mongodb--与spring整合

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 一、spring-data-mongodb   Spring Data是Spring专门用来数据处理的一个子项目,Spring Data除了spring-data-mongodb之外还包括spring-data-jp、spring-data-redis等项目。

一、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 }
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
4月前
|
NoSQL Java API
Spring Data MongoDB 使用
Spring Data MongoDB 使用
217 1
|
4月前
|
NoSQL Java MongoDB
Spring Boot与MongoDB的集成应用
Spring Boot与MongoDB的集成应用
|
4月前
|
存储 NoSQL Java
使用Spring Boot和MongoDB构建NoSQL应用
使用Spring Boot和MongoDB构建NoSQL应用
|
4月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
5月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
6月前
|
NoSQL Java MongoDB
Spring 5整合MongoDB
【5月更文挑战第9天】
|
5月前
|
NoSQL Java MongoDB
Java一分钟之-Spring Data MongoDB:MongoDB集成
【6月更文挑战第11天】Spring Data MongoDB简化Java应用与MongoDB集成,提供模板和Repository模型。本文介绍其基本用法、常见问题及解决策略。包括时间字段的UTC转换、异常处理和索引创建。通过添加相关依赖、配置MongoDB连接、定义Repository接口及使用示例,帮助开发者高效集成MongoDB到Spring Boot应用。注意避免时间差、异常处理不充分和忽视索引的问题。
131 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
12天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
13天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。