使用MongoDB
需要在Spring Boot应用中使用MongoDB,可以在pom.xml中添加spring-boot-starter-data-mongodb
依赖,这样Spring Boot会自动配置MongoDB的相关bean,比如MongoClient、MongoTemplate等,可以参考Spring Data MongoDB的自动配置类org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
的API文档或源码。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
默认配置的MongoDB连接对应的主机是localhost,端口号是标准端口号27017,database是test。可以通过spring.data.mongodb
打头的配置属性进行配置,对应的属性将绑定到org.springframework.boot.autoconfigure.mongo.MongoProperties
对象,下面的代码重新配置了主机、端口号和database。更多配置信息可以参考MongoProperties
的API文档或源代码。
spring.data.mongodb.host=10.192.48.170
spring.data.mongodb.port=27017
spring.data.mongodb.database=test_db
之后就可以直接通过MongoTemplate进行MongoDB的操作了。下面的代码中定义了一个User类,其userId属性对应MongoDB的user这个document的id属性,username属性对应于MongoDB的user这个document的user_name属性。然后在测试类中,new了一个User对象,通过MongoTemplate对象把它存入到了MongoDB中。
@Document
@Data
public class User {
@Id
private Long userId;
private String name;
@Field("user_name")
private String username;
}
@SpringBootTest(classes=Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MongoTest {
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void testSave() {
User user = new User();
user.setUserId(2L);
user.setName("张三");
user.setUsername("zhangsan");
this.mongoTemplate.save(user);
}
}
也可以定义Spring Data Repository,通过Repository对MongoDB进行访问。定义的Repository,Spring Boot将自动对其进行扫描,由org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration
定义,扫描路径是Spring Boot启动类所在的包。有需要也可以手动加上@EnableMongoRepositories
以指定需要扫描的路径。下面的代码定义了一个UserRepository,其继承自标准的MongoRepository,同时又按照Spring Data的规范定义了一个findByName方法。
public interface UserRepository extends MongoRepository<User, Long> {
List<User> findByName(String name);
}
之后可以直接在需要的地方注入UserRepository,通过UserRepository访问MongoDB,下面的代码中就分别利用注入的UserRepository进行了User对象的新增和查询操作。
@SpringBootTest(classes=Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MongoTest {
@Autowired
private UserRepository userRepository;
@Test
public void testSave() {
User user = new User();
user.setUserId(3L);
user.setName("张三");
user.setUsername("zhangsan");
this.userRepository.save(user);
}
@Test
public void testFindByName() {
List<User> users = this.userRepository.findByName("张三");
Assert.assertNotNull(users);
Assert.assertEquals("张三", users.get(0).getName());
}
}
本文旨在描述在Spring Boot应用中如何使用MongoDB,所以对Spring Data MongoDB的内容没有讲解太多。
基于Reactive编程
如果期望基于Reactive编程则可以引入spring-boot-starter-data-mongodb-reactive
依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
引入该依赖后Spring Boot将自动配置一个ReactiveMongoTemplate,它默认使用Reactor实现进行Reactive编程。我们可以直接在应用中注入ReactiveMongoTemplate实例,通过它进行相关Reactive操作。下面的代码展示了通过ReactiveMongoTemplate进行User对象的保存操作。
@SpringBootTest(classes=Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MongoTest {
@Autowired
private ReactiveMongoTemplate reactiveMongoTemplate;
@Test
public void testReactive() {
User user = new User();
user.setUserId(4L);
user.setName("李四");
user.setUsername("lisi");
Mono<User> mono = this.reactiveMongoTemplate.save(user);
mono.block();
}
}
Repository中的相关操作也是可以基于Reactive的,这需要我们定义的Repository继承自下面的四个接口之一,其中前面两个是基于Reactor实现,后面两个是基于RxJava2实现。以SortingRepository结尾的Repository都继承自对应的CrudRepository。
- ReactiveCrudRepository
- ReactiveSortingRepository
- RxJava2CrudRepository
- RxJava2SortingRepository
添加了spring-boot-starter-data-mongodb-reactive
依赖后,会自动添加Reactor依赖,所以可以直接使用ReactiveCrudRepository和ReactiveSortingRepository。下面的代码中定义的ReactiveUserRepository就是基于ReactiveSortingRepository实现的,同时扩展了一个查询操作findByUsername
,其返回结果是Reactor实现的Flux。
public interface ReactiveUserRepository extends ReactiveSortingRepository<User, Long> {
Flux<User> findByUsername(String username);
}
上面定义的ReactiveUserRepository也会被自动扫描到,并被注册为Spring bean,在程序中可以直接注入ReactiveUserRepository对象进行使用,比如下面代码这样。
@SpringBootTest(classes=Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MongoTest {
@Autowired
private ReactiveUserRepository reactiveUserRepository;
@Test
public void testReactiveUserRepository() throws Exception {
User user = new User();
user.setUserId(System.currentTimeMillis());
user.setName("李四");
user.setUsername("lisi");
Mono<User> mono = this.reactiveUserRepository.save(user);
mono.subscribe(u -> System.out.println("saved success : " + u));
//get users by username
Flux<User> flux = this.reactiveUserRepository.findByUsername("lisi");
flux.subscribe(System.out::println);
TimeUnit.SECONDS.sleep(1);
}
}
如果需要使用RxJava2CrudRepository和RxJava2SortingRepository,则需要引入RxJava2的依赖。
<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
</dependency>
之后可以像使用ReactiveCrudRepository一样使用它们。下面的代码定义了一个基于RxJava2的Repository,同时扩展了一个findByUsername
查询,返回类型是RxJava2实现的Flowable。
public interface RxJava2UserRepository extends RxJava2SortingRepository<User, Long> {
Flowable<User> findByUsername(String username);
}
它也可以直接被扫描和定义为一个Spring bean,所以也可以直接在程序中进行注入。
@SpringBootTest(classes=Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MongoTest {
@Autowired
private RxJava2UserRepository rxJava2UserRepository;
@Test
public void testRxJava2UserRepository() throws Exception {
User user = new User();
user.setUserId(System.currentTimeMillis());
user.setName("李四");
user.setUsername("lisi");
Single<User> single = this.rxJava2UserRepository.save(user);
System.out.println("saved success : " + single.blockingGet());
//get users by username
Flowable<User> flowable = this.rxJava2UserRepository.findByUsername("lisi");
flowable.subscribe(System.out::println);
TimeUnit.SECONDS.sleep(1);
}
}
(注:本文是基于Spring Boot 2.0.3所写)
相关推荐
同时,书中也会介绍Spring Boot的安全组件——Spring Security,帮助读者理解如何保护Web应用的安全性。 数据库集成是现代Web应用不可或缺的部分,书中将介绍如何使用Spring Data JPA和MyBatis等技术与关系型数据库...
Spring Boot 2.x 教程中的MongoDB使用详解 MongoDB是一个流行的NoSQL数据库系统,设计为分布式存储,提供高性能和可伸缩性。它的数据结构以BSON(Binary JSON)为主,允许存储复杂的数据类型,特别适合Node.js应用...
本压缩包包含的两本书籍——《SpringBoot揭秘》和《spring-boot-中文参考指南》,都是深入理解和掌握Spring Boot的重要资源。 《SpringBoot揭秘》一书主要涵盖了以下核心知识点: 1. **Spring Boot入门**:介绍...
数据库方面,虽然未明确指出使用何种数据库,但通常Spring Boot会配合MySQL、PostgreSQL等关系型数据库或MongoDB等非关系型数据库使用。在这个疫情数据查看网站中,可能存储了各国或地区的确诊、治愈、死亡病例等...
在本教程系列——"Spring Boot教程系列(ImportNew)"中,我们将深入探讨Spring Boot的核心概念、优势及实际应用。 首先,Spring Boot的核心特性之一是“起步依赖”(Starter POMs)。这些预配置的Maven或Gradle...
涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...
标题中的“Java毕业设计——基于spring boot的旅游网站设计与实现”揭示了这是一个关于使用Java编程语言和Spring Boot框架开发的在线旅游网站项目。这个项目可能是为了满足大学毕业生的课程需求,让学生在实践中掌握...
Spring Boot 应用程序 mvn spring-boot:run打开WebApp: 去做将 MongoDB 更新到 1.7(取决于 Spring Boot Parent)——使用 Java8 LocalDate 而不是 java.util.Date 更新客户搜索以显示搜索结果
通过分析和运行这些模块的源代码,开发者可以学习到如何在Spring Boot中实现RESTful API,使用Spring Security进行权限控制,以及如何利用WebSocket实现实时通信。此外,项目可能还涉及到数据持久化(如使用MySQL或...
基于springboot下对mysql,mongodb,redis支持ipv6的改造(csdn)————程序
涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...
本文将深入探讨一个荣获优秀毕业设计奖项的项目——基于Spring Boot的上课考勤系统。这个系统不仅集成了小程序的考勤功能,还具备后台管理、GPS定位打卡以及迟到统计等多种实用特性,充分体现了开发者对现代教育信息...
在本文中,我们将深入探讨如何将Spring Boot框架与MongoDB数据库集成,以便实现全面的CRUD(创建、读取、更新、删除)功能。我们将以一个具体的实例——员工表为例,来阐述这一过程。 首先,我们需要理解Spring ...
涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...
本文将深入探讨一个具体的实践案例——"spring-boot-hexagonal-architecture-master",它是一个基于Spring Boot实现的六角形(或称六边形)架构的Proof of Concept (POC) 应用程序。我们将围绕Spring Boot、数据库...
* spring-boot-starter-data-mongodb-reactive:提供了对 MongoDB 数据库的响应式支持。 * spring-boot-starter-data-neo4j:提供了对 Neo4j 图数据库的支持。 * spring-boot-starter-data-redis:提供了对 Redis ...
《Spring Boot实战——深入解析与应用》 Spring Boot是由Pivotal团队提供的全新框架,它为简化Spring应用程序的初始搭建以及开发过程而诞生。通过自动配置、起步依赖和Actuator等特性,Spring Boot使得创建独立运行...
《SpringBoot汽车租赁系统-Car Rental Management On Spring Boot》 在现代信息技术的推动下,汽车租赁行业也逐渐向数字化转型,而SpringBoot框架凭借其高效、便捷的特点,成为了开发此类系统的首选技术。本项目...
《基于Spring MongoDB实现的小型网上商场系统——ZhiZu Shop深度解析》 在现代互联网技术的推动下,电子商务已经成为日常生活中不可或缺的一部分。ZhiZu Shop作为一个基于Spring框架和MongoDB数据库构建的小型网上...
SpringBoot知识点整理思维导图是针对Java开发领域中流行的微服务框架——Spring Boot进行系统性梳理的工具。Spring Boot以其快速启动、简化配置的特点,深受开发者喜爱。在本思维导图中,主要涵盖了以下几个核心知识...