說說springboot與大叔lind.ddd的淵源
mongodb在lind.ddd中被二次封裝過(大叔的.net和.net core),將它當成是一種倉儲來使用,對于開發人員來說只公開curd幾個標準的接口即可,而在springboot框架里,它與大叔lind有些類似之處,同樣是被二次封裝了,開發人員只需要關注自己的業務即可,而標準的curd操作完成由springboot幫助我們來實現,一般地,我們會設計一個與實體對象的接口倉儲,讓它去繼承mongo的標準接口,然后在springboot的依賴注入框架里把標準的實現注入進來,這一切都是框架幫助我們實現的!
在項目中實現mongodb
如果項目需要使用mongodb去持久化數據,一般可以經過下面幾個步驟來實現:
1 添加包依賴build.gradle
1
|
compile( 'org.springframework.boot:spring-boot-starter-data-mongodb' ) |
如果有單元測試項目,可以使用內嵌的mongodb,這樣它不需要與外部資源進行通信,工作原理:從遠程下載mongodb包,啟動它,測試完成后刪除生成的集合
1
|
testcompile( 'de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.0.3' ) |
2 添加默認的配置項application.yml
1
2
3
4
5
6
|
spring: data: mongodb: uri: mongodb: //192.168.99.100:27017/test password: guest username: guest |
3 添加mongodb集合對應的實體類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/** * 地址. */ @data @noargsconstructor @allargsconstructor public class address { /** * 編號. */ @id private string id; /** * 省. */ private string province; /** * 市. */ private string city; /** * 區. */ private string district; /** * 狀態. */ private status status; } |
4 添加實體所對應的倉庫類,它需要繼承extends標準的mongodb倉儲,同時mongodb倉儲支持自動定約定的方法,開發人員可以通過@query注釋來確定返回的字段列表,這對于大數據文檔是很必要的,如果默認的接口不能滿足我們的要求,我們需要定義個性化的接口,并去實現它,下面的例子中,我們的addressextrepository就是一個個性化接口,我們對外的接口addressrepository 需要繼承它,注意,大叔認為這樣破獲了面向對象的開閉原則,元芳,你怎么看!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/** * 對外提供的地址倉儲接口,繼承所有地址相關的接口. */ public interface addressrepository extends addressextrepository, mongorepository<address, string> { /** * 根據省,拿地址列表. * * @param province * @return */ @query (fields = "{'province': 0}" ) list<address> findaddressesbyprovince(string province); /** * 根據省和省,拿地址列表. * * @param province * @param city * @return */ @query () //fields表示包含的字段 list<address> findaddressesbyprovinceandcityanddistrict(string province, string city, string district); } |
個性化倉儲實現,使用mongotemplate對象與mongodb數據庫進行交互!
1
2
3
4
5
6
7
8
9
10
11
12
|
/** * 特殊規則的倉儲實現. */ public class addressextrepositoryimpl implements addressextrepository { @autowired mongotemplate mongotemplate; @override public address findbyprovinceandcity(string province, string city) { query query = new query(criteria.where( "province" ).is(province).and( "city" ).is(city)); return mongotemplate.findone(query, address. class , "address" ); } } |
5 controller中直接通過@autowired注解來訪問倉儲和業務對象即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@restcontroller public class mongocontroller { // 倉儲. @autowired private addressrepository repository; // 用戶業務. @autowired private userservice userservice; /** * 得到地址列表. * * @return */ @requestmapping ( "/address/{province}" ) public address getaddress( @pathvariable ( "province" ) string province) { system.out.println( "1,province=" + province); return userservice.getaddress(province); } } |
總結
以上所述是小編給大家介紹的springboot mongodb的集成與使用實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/lori/archive/2018/04/18/8875701.html