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<BookMongoDao, 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
        MongoTempalte 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章