91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot Mongodb的集成與使用實例詳解

發布時間:2020-09-13 22:52:22 來源:腳本之家 閱讀:204 作者:張占嶺 欄目:編程語言

說說springboot與大叔lind.ddd的淵源

Mongodb在Lind.DDD中被二次封裝過(大叔的.net和.net core),將它當成是一種倉儲來使用,對于開發人員來說只公開curd幾個標準的接口即可,而在springboot框架里,它與大叔lind有些類似之處,同樣是被二次封裝了,開發人員只需要關注自己的業務即可,而標準的curd操作完成由springboot幫助我們來實現,一般地,我們會設計一個與實體對象的接口倉儲,讓它去繼承mongo的標準接口,然后在springboot的依賴注入框架里把標準的實現注入進來,這一切都是框架幫助我們實現的!

在項目中實現mongodb

如果項目需要使用mongodb去持久化數據,一般可以經過下面幾個步驟來實現:

1 添加包依賴build.gradle

compile('org.springframework.boot:spring-boot-starter-data-mongodb')

如果有單元測試項目,可以使用內嵌的mongodb,這樣它不需要與外部資源進行通信,工作原理:從遠程下載mongodb包,啟動它,測試完成后刪除生成的集合

testCompile('de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.0.3')

2 添加默認的配置項application.yml

spring:
 data:
  mongodb:
   uri: mongodb://192.168.99.100:27017/Test
   password: guest
   username: guest

3 添加mongodb集合對應的實體類

/**
 * 地址.
 */
@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 需要繼承它,注意,大叔認為這樣破獲了面向對象的開閉原則,元芳,你怎么看!

/**
 * 對外提供的地址倉儲接口,繼承所有地址相關的接口.
 */
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數據庫進行交互!

/**
 * 特殊規則的倉儲實現.
 */
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注解來訪問倉儲和業務對象即可

@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的集成與使用實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克东县| 大丰市| 龙州县| 出国| 黑龙江省| 云龙县| 泰顺县| 确山县| 辽宁省| 安吉县| 洪江市| 开阳县| 深水埗区| 德安县| 华容县| 丹寨县| 遵义市| 长宁县| 疏勒县| 平乐县| 闽侯县| 稷山县| 陇川县| 盐亭县| 穆棱市| 叶城县| 浦城县| 环江| 宁阳县| 方正县| 织金县| 明水县| 新田县| 买车| 浦东新区| 高雄县| 襄樊市| 乳源| 古交市| 余江县| 桃源县|