SpringBoot 学习笔记_整合NoSQL —— MongoDB

声明:

本次学习参考 《SpringBoot + Vue 开发实战》 · 王松(著) 一书。

本文的目的是记录我学习的过程和遇到的一些问题以及解决办法,其内容主要来源于原书。

如有侵权,请联系我删除


文章目录

  • SpringBoot 学习笔记_整合NoSQL —— MongoDB
  • SpringBoot 整合 NoSQL
  • 整合 MongoDB
  • MongDB 安装
  • 整合 MongDB


SpringBoot 整合 NoSQL

整合 MongoDB

MongDB 是一种面向文档的数据库管理系统,介于关系型数据库和非关系型数据库直接的产品。

MongDB 安装
  • CentOS 7
  • 安装 wget:
  • yum install wget
  • 使用 wget 下载 MongDB:
  • wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
  • 解压 MongoDB
  • tar -zxvf mongodb-linux-x86_64-4.0.0.tgz
  • `mv mongodb-linux-x86_64-4.0.0.0 mongodb
  • 配置 MongoDB
    进入 MongoDB 目录下,创建两个文件夹 db 和 logs, 分别用来保存数据和日志
cd mongodb
mkdir db
mkdir logs
  • 进入 bin 目录,创建新的 MongoDB 配置文件 mongo.conf
# 数据存储目录
dbpath=/opt/mongodb/db
# 日志文件位置
logpath=/opt/mongodb/logs/mongodb.log
# 启动端口		
port=27017
# 以守护程序的方式启动 MongoDB,即允许后台允许
fork=true
  • 启动 MongoDB
./mongod -f mongo.conf --bind_ip_all
  • -f 表示指定配置文件的位置
  • –bind_ip_all 则表示允许所有的远程地址连接该 MongoDB 实例

启动成功后,在 bin 目录下再执行 mongo 命令,进入 MongoDB 控制台,可以输入 db.version() 查看版本进行测试安装是否成功。

  • 关闭 MongoDB
    默认情况下,MongoDB 启动后连接的是 test 库,而关闭 MongoDB 的命令需要在 admin 库中执行,因此关闭 MongoDB 需要首先切换到 admin 库,然后执行 db.shutdownServer(); 命令
use admin;
db.shutdownServer();
exit;
  • 安全管理
    默认情况下 MongoDB 没有登录密码,在生产环境中这是非常不安全的,MongoDB 中每一个库都有独立的密码,要配置密码,首先要创建一个用户。例如在 admin 库中创建一个用户
use admin;
db.createUser({"user": "sang", "pwd": "123456", roles: [{role: "readWrite", db: "test"}]})

用户创建成功后,关闭当前实例然后重新启动

./mongod -f mongo.conf --auth --bind ip all

启动成功后,再次进入控制台,切换到 admin 库中登录

./mongo
db.auth("sang", "123456")

如果执行结果为 1 , 表示认证成功。

  • Windows
  • 下载 MongoDB 安装包
    https://www.mongodb.com/download-center/community?jmp=nav


  • 运行安装程序(默认配置,一路下一步即可)
  • 启动 MongoDB
整合 MongDB
  • 创建 SpringBoot 项目,添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  • 配置 MongDB (application.properties)
### MongoDB 配置 ###
# 验证登录信息的库
spring.data.mongodb.authentication-database=admin
# 要连接的库。认证信息不一定要在连接的库中创建
spring.data.mongodb.database=test
# 基本配置
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.username=sang
spring.data.mongodb.password=123456
  • 创建实体类
public class BookMongo {
    private Integer id;
    private String name;
    private String author;
	/* Getter & Setter */
}
  • 创建 Dao (继承 MongoRepository)
public interface BookMongoDao extends MongoRepository<BookMongo, Integer>{
    List<BookMongo> findByAuthorContains(String author);
    Book findByNameEquals(String name);
}
  • 创建 Controller
public class BookMongoDBController {

    @Autowired
    BookMongoDao bookDao;

    @GetMapping("/mongoTest")
    public void mongoTest(){
        List<BookMongo> books = new ArrayList<>();
        BookMongo book1 = new BookMongo();
        book1.setId(11);
        book1.setName("Spring+Vue开发实战");
        book1.setAuthor("王松");
        books.add(book1);

        BookMongo book2 = new BookMongo();
        book2.setId(22);
        book1.setName("呐喊");
        book1.setAuthor("鲁迅");

        books.add(book2);

        // MongoRepository 中的 insert 方法插入集合中的数据
        bookDao.insert(books);
        List<BookMongo> books1 = bookDao.findByAuthorContains("王松");
        System.out.println(books1);

        BookMongo book = bookDao.findByNameEquals("呐喊");
        System.out.println(book);
    }
}
  • 测试
    https://localhost:8080/mongoTest1

或者,SpringBoot 默认提供了 MongoTemplate 可以直接使用,也可以自定义。

  • 创建 Controller
public class BookMongoDBController {

    /* MongoTemplate */
    @Autowired
    MongoTemplate mongoTemplate;
    @GetMapping("/mongoTest2")
    public void mongoTest2 () {
        List<BookMongo> books = new ArrayList<>();
        BookMongo book1 = new BookMongo();
        book1.setId(31);
        book1.setName("围城");
        book1.setAuthor("钱钟书");
        books.add(book1);

        BookMongo book2 = new BookMongo();
        book2.setId(41);
        book2.setName("登鹳雀楼");
        book2.setAuthor("李白");
        books.add(book2);

        mongoTemplate.insertAll(books);
        List<BookMongo> list = mongoTemplate.findAll(BookMongo.class);
        System.out.println(list);
        BookMongo book = mongoTemplate.findById(31, BookMongo.class);
        System.out.println(book);
    }
}
  • 测试
    https://localhost:8080/mongoTest2