spring-boot 整合mongo
技術(shù)版本說明
1. springboot .version - 2.2.2.RELEASE
2. jdk .version - 8
3. lombok.version - version - 1.18.10
4. hutool-all.version - 5.6.2
5. spring-boot-starter-data-mongo.version - 延用springboot里的版本(即 2.2.2.RELEASE)
源碼地址
gitee地址: https://gitee.com/zjydzyjs/spring-boot-use-case-collection/tree/master/spring-boot-no-sql/mongo
yml配置說明
如下圖(yml配置):
yml 配置(圖)
備注: 我這里只是簡單配置,如果需要自定義復(fù)雜配置,請自行配置;
想知道都支持那些屬性配置的?
- 請搜索類 {@link MongoProperties.class};
package: org.springframework.boot.autoconfigure.mongo
下的
MongoProperties.class
直接通過點擊yml配置中的mongodb下的最后一層內(nèi)容即可跳轉(zhuǎn)到具體類,例如點擊application-dev.yml 中的host 屬性;
通過找尋Mongo自動配置類來找到具體的屬性配置;
右邊 MongoDataAutoConfiguration點擊進(jìn)去,即可找到
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({MongoClient.class, com.mongodb.client.MongoClient.class, MongoTemplate.class})
@EnableConfigurationProperties({MongoProperties.class})
@Import({MongoDataConfiguration.class, MongoDbFactoryConfiguration.class, MongoDbFactoryDependentConfiguration.class})
@AutoConfigureAfter({MongoAutoConfiguration.class})
public class MongoDataAutoConfiguration {
public MongoDataAutoConfiguration() {
}
}
@EnableConfigurationProperties 可以得知Mongo配置類是MongoProperties.class
Spring-Boot兩種與Mongo 交互的方式
1.MongoTemplate
前言
spring-boot-starter-data-mongo 封裝了對象用于對mongo的操作,你可以理解為這是spring-boot幫我們寫好了一個用于操作mongo的工具類(或服務(wù)類),這個類叫 MongoTemplate.class
{@link org.springframework.data.mongodb.core.MongoTemplate}
類似于RdisTemplate 這種模板工具類
細(xì)說
額,??,該模板過于復(fù)雜,我也不會,大兄弟你懂的,所以暫時掠過這里,本文檔主要講述如何快速入門操作;
所以,真的不是我不講!!!
如何使用
我通過 MongoTemplate 簡單的封裝了一個 MongoService 以可以快速的使用MongoTemplate , 地址為 mongo模塊下的{@link com.blacktea.mongo.service.MongoTemplate}
一些簡單的增刪改查里面都有,存在問題或沒有的自己修改一下就行,歡迎提出指定建議家制。
你可以通過我封裝的方法進(jìn)行查看,相信你可以看的懂簡單的MongoTemplate 操作,復(fù)雜的操作的話,可以自己去研究,我這里也歡迎你補充尿赚。
測試的例子,我都寫在 {@link com.blacktea.mongo.MongoApplicationTests}
可以直接去玩一下犬耻。
2. MongoRepository(繼承接口)
前言
spring-boot-starter-data-mongo 封裝了對象用于對mongo的操作,你可以理解為這是spring-boot幫我們寫好了一個用于操作mongo的接口,它自己會去是實現(xiàn)該接口,無需你自己實現(xiàn),這個接口叫 MongoRepository
{@link org.springframework.data.mongodb.repository.MongoRepository}
類似于springboot幫Jpa實現(xiàn)的這種接口
細(xì)說
我沒寫分頁、保存等接口?
它怎么實現(xiàn)分頁瘟仿、保存等功能?
你可以點進(jìn)這個接口進(jìn)行查看,可以發(fā)現(xiàn)是下圖 MongoRepository源碼
當(dāng)前這個接口僅有7個方法,但是你在接著打開它繼承的接口,將所有繼承包含父類繼承都打開會發(fā)現(xiàn)下圖 所有方法
所以有知道怎么有那些功能了吧,因為springboot做了封裝,你繼承那個接口,它會自動去實現(xiàn)接口,至于接口實現(xiàn)的內(nèi)容,請去這個類 {@link org.springframework.data.mongodb.repository.support.SimpleMongoRepository}
重要: 這里我沒講它是怎么掃描并交給spring管理的,因為我不會......??(流下了沒技術(shù)的淚水)阔挠。
歡迎大佬補充!
這里還有一個關(guān)鍵點 下圖的動態(tài)接口名稱是怎么生成的?
這個我是真不知道,下次有機會再補充吧!
也歡迎大佬留言!
如何使用
我寫了一個模板 {@link com.blacktea.mongo.dao.mongo.MongoTestRepository} 可以看看。
重點:
mongo數(shù)據(jù):
{
"_id" : NumberLong(1002),
"des" : "測試第一次",
"date" : ISODate("2021-08-31T06:42:50.540Z"),
"data" : {
"name" : "2",
"index" : 2
},
"_class" : "com.blacktea.mongo.entites.dto.MongoTestDTO"
}
當(dāng)數(shù)據(jù)出現(xiàn)嵌套層的時候,這里的查詢?nèi)缦?
List<MongoTestDTO> findByData_Name(String data_name);
當(dāng)前對象MongoTestDTO下的嵌套類 (屬性對象)
{@link com.blacktea.mongo.entites.dto.MongoTestDTO.T}