六、Spring Boot 整合 NoSQL(3)

本章概要

  • 整合 MongoDB

6.2 整合 MongoDB

6.2.1 MongoDB 简介

MongoDB 是一种面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库之间的产品,MongoDB 功能丰富,它支持一种类似 JSON 的 BSON 数据格式,既可以存储简单的数据格式,也可以存储复杂的数据类型。MongoDB 最大的特点是它支持的查询语句非常强大,并且还支持对数据建立索引。总体来说,MongoDB 是一款应用相当广泛的 NoSQL 数据库。

6.2.2 MongoDB 安装

MongoDB 版本 4.0.0 ,安装环境 CentOS 7

1. 下载 MongoDB

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz

在这里插入图片描述

解压,重命名

tar -zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt/soft/
mv /opt/soft/mongodb-linux-x86_64-4.0.0 /opt/soft/mongodb

2. 配置 MongoDB

进入 MongoDB 目录下,创建两个文件夹 db 和 logs ,分别用来保存数据和日志

mkdir /opt/soft/mongodb/db
mkdir /opt/soft/mongodb/logs
touch /opt/soft/mongodb/logs/mongdb.log

然后进入 bin 目录下,创建一个新的 MongoDB 配置文件 mongo.conf ,文件内容如下

dbpath=/opt/soft/mongodb/db
logpath=/opt/soft/mongodb/logs/mongdb.log
port=27017
fork=true

配置解释:

  • fork 表示以守护程序的方式启动 MongoDB ,即允许 MongoDB 在后台运行
  • 其它三个自行脑补

3. MongoDB 的启动和关闭

启动 MongoDB

/opt/soft/mongodb/bin/mongod -f /opt/soft/mongodb/bin/mongo.conf --bind_ip_all

在这里插入图片描述

参数解释:

  • -f 指定配置文件
  • –bind_ip_all 允许所有远程地址连接

执行 mongo 命令,进入 MongoDB 控制台,输入db.version(),查看版本号

/opt/soft/mongodb/bin/mongo
db.version()

在这里插入图片描述

默认情况下,启动后连接的是 MongoDB 中的 test 库,而关闭 MongoDB 的命令需要在 admin 库中执行,因此关闭 MongoDB 需要先切换到 admin 库,然后执行 db.shutdownServer(); 命令,如下

use admin;
db.shutdownServer(); 
exit

在这里插入图片描述

4. 安全管理

默认情况下,启动的 MongoDB 没有登录密码,在生产环境中非常不安全,但是不同于 MySQL、Oracle 等关系型数据库, MongoDB 中每一个都有独立的密码,在那一个库中创建用户就要在哪一个库中验证密码。要配置密码,首先要创建一个用户,例如在 admin 库中创建一个用户,如下

use admin;
db.createUser({
    
    user:"root1",pwd:"root1",roles:[{
    
    role:"readWrite",db:"test"}]});

在这里插入图片描述

新创建的用户名为 root1 ,密码是 root1 ,roles 表示该用户具有的角色,这里的配置表示该用户对 test 库具有读和写两项权限
用户创建成功后,关闭当前实例,然后重新启动

/opt/soft/mongodb/bin/mongod -f /opt/soft/mongodb/bin/mongo.conf --auth --bind_ip_all

启动成功后,在此进入控制台,然后切换到 admin 库中验证登录(默认连接上的库是 test 库),验证成功后就可以对 test 库进行读写操作了,如下

/opt/soft/mongodb/bin/mongo
use admin;
db.auth("root1","root1")

在这里插入图片描述

db.auth(“root1”,“root1”) 返回 1 表示认证成功。

6.2.3 整合 Spring Boot

借助于 Spring Data MongoDB ,Spring Boot 为 MongoDB 也提供了开箱即用的自动化配置方案,具体步骤如下:

1. 创建 Spring Boot 工程

创建 Spring Boot Web 工程,添加 MongoDB 依赖,如下

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 配置 MongoDB

在 application.properties 中配置 MongoDB 连接信息

# 验证登录信息的库
spring.data.mongodb.authentication-database=admin
# 要连接的库,认证信息不一定要在连接的库中创建,因此这两个分开配置
spring.data.mongodb.database=test
# mongodb 的连接地址 端口 帐号 密码
spring.data.mongodb.host=ip地址
spring.data.mongodb.port=27017
spring.data.mongodb.username=root1
spring.data.mongodb.password=root1

3. 创建实体类

public class Book{
    
    
    private Integer id;
    private String name;
    private String author;
    @Override
    public String toString() {
    
    
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getAuthor() {
    
    
        return author;
    }

    public void setAuthor(String author) {
    
    
        this.author = author;
    }
}

4. 创建 BookDao

BookDao 的定义类似于 Spring Data JPA 中的 Repository 定义

public interface BookDao extends MongoRepository<Book,Integer> {
    
    
    List<Book> findByAuthorContains(String author);
    Book findByNameEquals(String name);
}

5. 创建 Controller

简单起见,直接将 BookDao 注入 Controller 进行测试

@RestController
public class BookController {
    
    
    @Autowired
    BookDao bookDao;

    @GetMapping("/test1")
    public void test1() {
    
    
        List<Book> books = new ArrayList<>();
        Book b1 = new Book();
        b1.setId(1);
        b1.setName("朝花夕拾");
        b1.setAuthor("鲁迅");
        books.add(b1);
        Book b2 = new Book();
        b2.setId(2);
        b2.setName("呐喊");
        b2.setAuthor("鲁迅");
        books.add(b2);
        bookDao.insert(books);
        List<Book> books1 = bookDao.findByAuthorContains("鲁迅");
        System.out.println(books1);
        Book book = bookDao.findByNameEquals("朝花夕拾");
        System.out.println(book);
    }
}

6. 测试 BookDao

启动项目,localhost:8081/test1,打印日志如下

[Book{id=1, name='朝花夕拾', author='鲁迅'}, Book{id=2, name='呐喊', author='鲁迅'}]
Book{id=1, name='朝花夕拾', author='鲁迅'}

7. 使用 MongoTemplate

除了继承 MongoRepository 外,Spring Data MongoDB 还提供了 MongoTemplate 用来方便地操作 MongoDB。在 Spring Boot 中,若添加了 MongoDB 相关依赖,而开发者并没有提供 MongoTemplate ,则默认会有一个 MongoTemplate 注册到 Spring 容器中,相关配置源码在 MongoDataAutoConfiguration 类中。因此,用户可以直接使用 MongoTemplate ,在Controller 中直接注入 MongoTemplate 就可以使用,添加如下代码在 controller 中

 @Autowired
MongoTemplate mongoTemplate;

@GetMapping("/test2")
public void test2() {
    
    
    List<Book> books = new ArrayList<>();
    Book b1 = new Book();
    b1.setId(3);
    b1.setName("围城");
    b1.setAuthor("钱钟书");
    books.add(b1);
    Book b2 = new Book();
    b2.setId(4);
    b2.setName("宋诗选注");
    b2.setAuthor("钱钟书");
    books.add(b2);
    mongoTemplate.insertAll(books);
    List<Book> list = mongoTemplate.findAll(Book.class);
    System.out.println(list);
    Book book = mongoTemplate.findById(3, Book.class);
    System.out.println(book);
}

8. 测试使用 MongoTemplate

启动项目,localhost:8081/test2,打印日志如下

[Book{id=1, name='朝花夕拾', author='鲁迅'}, Book{id=2, name='呐喊', author='鲁迅'}, Book{id=3, name='围城', author='钱钟书'}, Book{id=4, name='宋诗选注', author='钱钟书'}]
Book{id=3, name='围城', author='钱钟书'}

猜你喜欢

转载自blog.csdn.net/GXL_1012/article/details/126162426
今日推荐