1. 程式人生 > >基於SpringBoot2 & MongoDB完成自動化集成

基於SpringBoot2 & MongoDB完成自動化集成

進行 delet 輸入 序列 imp del 數據操作 系統 圖片資源

MongoDB在企業級項目中一般用於存儲文檔信息、圖片資源等,MongoDB的內容完全是以 JSON字符串的形式進行存儲的,所以我們在獲取數據時通過簡單的 反序列化就可以完成與項目內的實體類轉換,不過這個過程是自動的,不需要我們手動進行反序列化處理。
本章目標
完成簡單的SpringBoot與MongoDB的自動化整合,讓我們像是使用spring-data-jpa的形式來完成MongoDB的數據操作。

001
Spring Boot 核心技術
講解SpringBoot一些企業級層面的核心組件

002
Spring Boot 核心技術章節源碼
Spring Boot 核心技術簡書每一篇文章碼雲對應源碼

003
Spring Cloud 核心技術

對Spring Cloud核心技術全面講解

004
Spring Cloud 核心技術章節源碼
Spring Cloud 核心技術簡書每一篇文章對應源碼

005
QueryDSL 核心技術
全面講解QueryDSL核心技術以及基於SpringBoot整合SpringDataJPA

006
SpringDataJPA 核心技術
全面講解SpringDataJPA核心技術

007
SpringBoot核心技術學習目錄
SpringBoot系統的學習目錄,

準備MongDB
我們使用MongoDB官方提供的安裝方式進行安裝,下面是對應系統的官方安裝文檔:

Linux下安裝MongoDB
Windows下安裝MongoDB
OSX下安裝MongoDB

創建用戶
我們需要創建一個用戶,用於本章的使用,如果你是OSX系統,只需要打開終端輸入mongo命令就可以進入MongoDB的管理界面。

  1. 創建數據庫
    使用 use test; 命令可以創建一個名為test的數據庫
  2. 創建數據庫所有者角色的用戶
    db.createUser(
    {
    user: "test",
    pwd: "123456",
    roles: [ { role: "dbOwner", db: "test" } ]
    }
    );
    用戶創建完成後就可以進行本章的編碼了,環境有了之後我們接下來需要進行環境的連接進行操作數據。

構建項目
我們使用IDEA創建一個新的SpringBoot項目,在pom.xml配置文件內添加我們本章所需要的依賴,如下所示:

<dependencies>

org.springframework.boot spring-boot-starter-data-mongodb org.projectlombok lombok true com.alibaba fastjson 1.2.44 org.springframework.boot spring-boot-starter-test test 根據mongodb的依賴我們可以看到Spring家族式的設計,把所有操作數據的依賴都進行歸類到spring-boot-starter-data-xxx下,我們比較常用到的如:spring-boot-starter-data-jpa、spring-boot-starter-data-redis等。 MongoRepository spring-boot-starter-data-mongodb確實采用了跟spring-boot-starter-data-jpa同樣的方式來完成接口代理類的生成,並且提供了一些常用的單個對象操作的公共方法,MongoRepository接口作用與JPARepository一致,繼承了該接口的業務數據接口就可以提供一個被Spring IOC托管的代理實現類,這樣我們在註入業務數據接口時就會完成代理實現類的註入。 廢話不多說了,下面我們直接來創建一個名為CustomerRepository的數據接口,該接口繼承MongoRepository,如下所示: /** * 客戶數據接口 * 繼承自MongoRepository接口 * * @author:
* =============================== * Created with IDEA. * Date:2018/3/28 * Time:下午7:41 * ================================ */ public interface CustomerRepository extends MongoRepository { } MongoRepository 同樣也是采用了兩個泛型參數, T:實體類類型。 PK:T實體類內的主鍵類型,如:String。 自定義實體類 我們在CustomerRepository接口內使用了Customer實體類作為泛型參數,下面我們簡單創建Customer實體類,內容如下所示: @Data public class Customer implements Serializable { /** * 客戶編號 */ @Id public String id; /** * 客戶名稱 */ public String firstName; /** * 客戶姓氏 */ public String lastName; public Customer(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } } 同樣我們需要通過@Id註解進行設置主鍵,不過這個主鍵的值是MongoDB自動生成的,生成的主鍵值是具有唯一性的。 添加配置 代碼已經準備好了,我們只需要添加MongoDB的一些配置信息就大功告成了,下面我們需要在application.yml配置文件內添加如下配置: spring: application: name: spring-boot-mongodb data: mongodb: uri: mongodb://localhost/test username: test password: 123456 在上面配置的uri內的test即為數據庫的名稱,username配置我們自定義的用戶名稱,password配置為自定義用戶設置的密碼。 上面我們的代碼已經全部編寫完成,接下來我們需要進行測試,來查看我們的CustomerRepository是否已經生效. 測試 我們使用CommandLineRunner接口進行簡單的項目運行後就執行Customer文檔內的數據操作,修改Chapter51Application入口類,添加CommandLineRunner接口的實現,如下所示: /** * 程序入口類 * @author yuqiyu */ @SpringBootApplication public class Chapter51Application implements CommandLineRunner { /** * logger instance */ static Logger logger = LoggerFactory.getLogger(Chapter51Application.class); /** * 客戶數據接口註入 */ @Autowired private CustomerRepository repository; public static void main(String[] args) { SpringApplication.run(Chapter51Application.class, args); logger.info("【【【【【SpringBoot整合Mongodb啟動完成.】】】】】"); } @Override public void run(String... args) { // 刪除全部 repository.deleteAll(); // 添加一條數據 repository.save(new Customer("於", "起宇")); // 查詢全部 logger.info(JSON.toJSONString(repository.findAll())); } } 在run方法內 刪除了Customer文檔內的全部內容 執行了保存數據的操作 查詢出本次保存的數據內容 下面我們來運行下程序查看控制臺的效果,如下所示: [{"firstName":"於","id":"5ad4be1cab73ac0bdc23bd9a","lastName":"起宇"}] 【【【【【SpringBoot整合Mongodb啟動完成.】】】】】 已經可以正常的輸出了MongoDB我們添加到文檔內的數據,在上面說到了id這個字段的特殊性,這是個分布式唯一性的字段值,是一個短板的md5格式的字符串。 修改默認掃描路徑 如果你不打算使用SpringBoot默認的掃描路徑(SpringBoot默認掃描XxxApplication類的同級以及所有子級的package)可以通過@EnableMongoRepositories註解配置basePackages屬性完成自定義的MongoDB的MongoRepository實現類的掃描,如下所示: @SpringBootApplication @EnableMongoRepositories(basePackages = "com.hengyu.chapter51") public class Chapter51Application implements CommandLineRunner { } 總結 本章簡單的講解了SpringBoot集成MongoDB,它與JPA有著同樣的數據操作方式,數據接口通過繼承MongoRepository就可以讓我們可以使用與JPA相同的方法進行操作MongoDB文檔內的數據,從而減少了學習的成本。

基於SpringBoot2 & MongoDB完成自動化集成