MongoDB
在企業級項目中通常用於存儲文檔信息、圖片資源等,MongoDB
的內容徹底是以 JSON
字符串的形式進行存儲的,因此咱們在獲取數據時經過簡單的 反序列化
就能夠完成與項目內的實體類轉換,不過這個過程是自動的,不須要咱們手動進行反序列化處理。linux
完成簡單的SpringBoot
與MongoDB
的自動化整合,讓咱們像是使用spring-data-jpa
的形式來完成MongoDB
的數據操做。git
專題 | 專題名稱 | 專題描述 |
---|---|---|
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系統的學習目錄,敬請關注點贊!!! |
咱們使用MongoDB
官方提供的安裝方式進行安裝,下面是對應系統的官方安裝文檔:redis
咱們須要建立一個用戶,用於本章的使用,若是你是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-jpa
、spring-boot-starter-data-redis
等。json
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
:實體類類型。 PK
:T
實體類內的主鍵類型,如: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
方法內
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
文檔內的數據,從而減小了學習的成本。
本章源碼已經上傳到碼雲: SpringBoot配套源碼地址:gitee.com/hengboy/spr… SpringCloud配套源碼地址:gitee.com/hengboy/spr… SpringBoot相關係列文章請訪問:目錄:SpringBoot學習目錄 QueryDSL相關係列文章請訪問:QueryDSL通用查詢框架學習目錄 SpringDataJPA相關係列文章請訪問:目錄:SpringDataJPA學習目錄,感謝閱讀! 歡迎加入QQ技術交流羣,共同進步。