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

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

声明:

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

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

如有侵权,请联系我删除

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

      download
      install
      2
      3
      4
      5

    • 运行安装程序(默认配置,一路下一步即可)

    • 启动 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HolaSecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值