50、Spring Boot 详细讲义(七) Spring Boot 与 NoSQL
七 Spring Boot 与 NoSQL
目录
- MongoDB 集成
- Redis 集成
- Elasticsearch 集成
1、 MongoDB 集成
1.1 MongoDB 概述
1.1.1 MongoDB 的基本概念
- 文档型数据库:
- 数据存储为类似 JSON 的文档结构(BSON 格式)。
- 每个文档由字段和值对组成,类似于键值对。
- 支持嵌入式文档和数组,灵活性高。
- BSON 格式:
- BSON(Binary Serialized JSON)是 JSON 的二进制形式。
- 比 JSON 更高效,支持更多数据类型(如日期、二进制数据等)。
- MongoDB 的核心特点:
- 模式自由:无需预定义模式,灵活变更。
- 高可用性:支持副本集和分片,确保数据可用性。
- 高扩展性:通过分片处理大规模数据。
- 高性能:查询优化和索引支持。
1.1.2 MongoDB 的安装与简单使用
-
安装 MongoDB:
- 下载:从官方网站下载适合的版本(Community Server 或 Enterprise Server)。
- 安装:
- Windows:使用 MSI 安装包安装。
- Linux:使用包管理器(如 apt、yum)安装。
- macOS:使用 Homebrew 或手动下载安装。
- 启动:运行
mongod
命令启动数据库服务。
-
Mongo Shell 的使用:
-
启动 Shell:在命令行输入
mongo
。 -
基本操作:
# 显示所有数据库 show dbs # 切换到指定数据库(若不存在则创建) use mydb # 插入文档 db.mycol.insertOne({name: "John", age: 30}) # 查询文档 db.mycol.find()
-
1.2 Spring Boot 与 MongoDB 集成
1.2.1 项目结构与依赖配置
-
Maven 依赖:
在pom.xml
中添加以下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
-
Gradle 依赖:
在build.gradle
中添加:dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' }
-
项目结构:
src/main/java
:存放 Java 源文件。src/main/resources
:存放配置文件(application.properties
)。
1.2.2 使用 Spring Data MongoDB 实现 CRUD 操作
-
创建文档模型:
@Document(collection = "users") public class User { @Id private String id; private String name; private int age; // Getter 和 Setter 方法 }
-
创建getRepository接口:
public interface UserRepository extends MongoRepository<User, String> { }
-
实现 CRUD 操作:
@Service public class UserService { @Autowired private UserRepository userRepository; public void create(User user) { userRepository.save(user); } public List<User> read() { return userRepository.findAll(); } public void update(User user) { userRepository.save(user); } public void delete(String id) { userRepository.deleteById(id); } }
1.2.3 MongoDB 配置
-
application.properties 配置:
spring: data: mongodb: uri: mongodb://localhost:27017/ database: mydb
-
连接池配置:
spring.data.mongodb.connection.pool.size=20
1.3 高级功能
1.3.1 分页查询与排序
-
分页查询:
public List<User> findAll(Pageable pageable) { return userRepository.findAll(pageable).getContent(); }
使用方式:
PageRequest pageRequest = PageRequest