標籤:etl his 設計 query 短板 構建項目 1.2 int dea
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的管理介面。
- 建立資料庫
使用 use test; 命令可以建立一個名為test的資料庫
- 建立資料庫擁有者角色的使用者
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等。MongoRepositoryspring-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實體類,內容如下所示:@Datapublic 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 */@SpringBootApplicationpublic 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完成自動化整合