第五十一章:基於SpringBoot2 & MongoDB完成自動化集成

MongoDB在企業級項目中通常用於存儲文檔信息、圖片資源等,MongoDB的內容徹底是以 JSON字符串的形式進行存儲的,因此咱們在獲取數據時經過簡單的 反序列化就能夠完成與項目內的實體類轉換,不過這個過程是自動的,不須要咱們手動進行反序列化處理。linux

本章目標

完成簡單的SpringBootMongoDB的自動化整合,讓咱們像是使用spring-data-jpa的形式來完成MongoDB的數據操做。git


爲你推薦

  1. 第四十七章:SpringBoot2.0新特性 - Quartz自動化配置集成
  2. 第四十八章:SpringBoot2.0新特性 - RabbitMQ信任package設置
  3. 第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer兩種配置方式了嗎?
  4. 第五十章:SpringBoot2.0新特性 - 豈止至今最簡單redis緩存集成

SpringBoot 企業級核心技術學習專題


專題 專題名稱 專題描述
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官方提供的安裝方式進行安裝,下面是對應系統的官方安裝文檔:redis

  1. Linux下安裝MongoDB
  2. Windows下安裝MongoDB
  3. OSX下安裝MongoDB

建立用戶

咱們須要建立一個用戶,用於本章的使用,若是你是OSX系統,只須要打開終端輸入mongo命令就能夠進入MongoDB的管理界面。spring

1. 建立數據庫
使用 use test; 命令能夠建立一個名爲`test`的數據庫
2. 建立數據庫全部者角色的用戶
db.createUser(
   {
     user: "test",
     pwd: "123456",
     roles: [ { role: "dbOwner", db: "test" } ]
   }
);
複製代碼

用戶建立完成後就能夠進行本章的編碼了,環境有了以後咱們接下來須要進行環境的鏈接進行操做數據。mongodb


構建項目

咱們使用IDEA建立一個新的SpringBoot項目,在pom.xml配置文件內添加咱們本章所須要的依賴,以下所示:數據庫

<dependencies>
        <!--mongodb依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <!--lombok依賴-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--fastjson依賴-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.44</version>
        </dependency>
        <!--測試依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
複製代碼

根據mongodb的依賴咱們能夠看到Spring家族式的設計,把全部操做數據的依賴都進行歸類到spring-boot-starter-data-xxx下,咱們比較經常使用到的如:spring-boot-starter-data-jpaspring-boot-starter-data-redis等。json


MongoRepository

spring-boot-starter-data-mongodb確實採用了跟spring-boot-starter-data-jpa一樣的方式來完成接口代理類的生成,而且提供了一些經常使用的單個對象操做的公共方法,MongoRepository接口做用與JPARepository一致,繼承了該接口的業務數據接口就能夠提供一個被Spring IOC託管的代理實現類,這樣咱們在注入業務數據接口時就會完成代理實現類的注入。 廢話很少說了,下面咱們直接來建立一個名爲CustomerRepository的數據接口,該接口繼承MongoRepository<T,PK>,以下所示:windows

/**
 * 客戶數據接口
 * 繼承自MongoRepository接口
 *
 * @author:於起宇 <br/>
 * ===============================
 * Created with IDEA.
 * Date:2018/3/28
 * Time:下午7:41
 * 簡書:http://www.jianshu.com/u/092df3f77bca
 * ================================
 */
public interface CustomerRepository extends MongoRepository<Customer, String> {
}
複製代碼

MongoRepository <T,PK>一樣也是採用了兩個泛型參數, T:實體類類型。 PKT實體類內的主鍵類型,如:String。緩存


自定義實體類

咱們在CustomerRepository接口內使用了Customer實體類做爲泛型參數,下面咱們簡單建立Customer實體類,內容以下所示:bash

@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方法內

  1. 刪除了Customer文檔內的所有內容
  2. 執行了保存數據的操做
  3. 查詢出本次保存的數據內容

下面咱們來運行下程序查看控制檯的效果,以下所示:

[{"firstName":"於","id":"5ad4be1cab73ac0bdc23bd9a","lastName":"起宇"}]
【【【【【SpringBoot整合Mongodb啓動完成.】】】】】
複製代碼

已經能夠正常的輸出了MongoDB咱們添加到文檔內的數據,在上面說到了id這個字段的特殊性,這是個分佈式惟一性的字段值,是一個短板的md5格式的字符串。


修改默認掃描路徑

若是你不打算使用SpringBoot默認的掃描路徑(SpringBoot默認掃描XxxApplication類的同級以及全部子級的package)能夠經過@EnableMongoRepositories註解配置basePackages屬性完成自定義的MongoDBMongoRepository實現類的掃描,以下所示:

@SpringBootApplication
@EnableMongoRepositories(basePackages = "com.hengyu.chapter51")
public class Chapter51Application implements CommandLineRunner { }
複製代碼

總結

本章簡單的講解了SpringBoot集成MongoDB,它與JPA有着一樣的數據操做方式,數據接口經過繼承MongoRepository就可讓咱們可使用與JPA相同的方法進行操做MongoDB文檔內的數據,從而減小了學習的成本。

本章源碼已經上傳到碼雲: SpringBoot配套源碼地址:gitee.com/hengboy/spr… SpringCloud配套源碼地址:gitee.com/hengboy/spr… SpringBoot相關係列文章請訪問:目錄:SpringBoot學習目錄 QueryDSL相關係列文章請訪問:QueryDSL通用查詢框架學習目錄 SpringDataJPA相關係列文章請訪問:目錄:SpringDataJPA學習目錄,感謝閱讀! 歡迎加入QQ技術交流羣,共同進步。

QQ技術交流羣

微信掃碼關注 - 專一分享
相關文章
相關標籤/搜索