日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

在Spring启动时与mongodb一起摇摆

發布時間:2023/12/3 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Spring启动时与mongodb一起摇摆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我是Spring Boot的粉絲,這是Spring Boot上的mongodb示例項目。 大多數mongodb示例項目是如此基礎,以至于您不會太過分。 您可以搜索普通的Spring Data示例,但是它們可能比您想要的復雜得多。 所以這是我的。
這是我要使用的pom。

<!--?xml version="1.0" encoding="UTF-8"?--> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0</modelversion><groupid>caught.co.nr</groupid><artifactid>boottoymongodb</artifactid><version>1.0-SNAPSHOT</version><packaging>war</packaging><!-- Inherit defaults from Spring Boot --><parent><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-parent</artifactid><version>1.0.0.BUILD-SNAPSHOT</version></parent><dependencies><dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-data-mongodb</artifactid></dependency></dependencies><!-- Needed for fat jar --><build><plugins><plugin><groupid>org.springframework.boot</groupid><artifactid>spring-boot-maven-plugin</artifactid></plugin></plugins></build><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>http://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginrepositories><pluginrepository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url></pluginrepository></pluginrepositories> </project>

我唯一需要的依賴項是“ spring-boot-starter-data-mongodb”,其中包含spring boot mongodb項目的所有必需依賴項。 接下來是我的收藏的模型。 文檔注釋指向我的收藏集,名為“產品”。 僅當您的型號名稱與集合名稱不匹配時才需要。 您可以看到一個字段注釋,該注釋將集合中的字段名稱映射到模型的字段名稱。

@Document(collection = "products") public class Product {@Idprivate String id;private String sku;@Field(value = "material_name")private String materialName;private Double price;private Integer availability;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSku() {return sku;}public void setSku(String sku) {this.sku = sku;}public String getMaterialName() {return materialName;}public void setMaterialName(String materialName) {this.materialName = materialName;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Integer getAvailability() {return availability;}public void setAvailability(Integer availability) {this.availability = availability;}@Overridepublic String toString() {return "Product{" +"id='" + id + '\'' +", sku='" + sku + '\'' +", materialName='" + materialName + '\'' +", price=" + price +", availability=" + availability +'}';} }

不需要,我們將需要DAO層來操縱我的數據。 如果要在DAO層中使用自動生成的查找方法,MongoRepository是我應該實現的接口。 這些自動生成的方法可以查詢模型的每個字段。 有關方法名稱語法的完整列表,請參見此處 。 我在下面的查詢將使用一個sku名稱,并在我的集合中搜索該名稱并返回匹配的名稱。

public interface ProductRepository extends MongoRepository < Product, String >{public List < Product > findBySku(String sku); }

現在,我將介紹一個服務,該服務將調用我的DAO接口。 但是請稍等,我沒有實現此接口,而是編寫了必要的代碼以獲取模型,對嗎? 是的,這些方法是自動生成的,我不需要此接口的實現。

@Service public class ProductService {@Autowiredprivate ProductRepository repository;public List < Product > getSku(String sku){return repository.findBySku(sku);} }

接下來,啟動我們的Boot示例。 這是我們的主要課程:

@Configuration @EnableAutoConfiguration @ComponentScan public class BootMongoDB implements CommandLineRunner {@Autowiredprivate ProductService productService;private static final Logger logger = LoggerFactory.getLogger(BootMongoDB.class);public void run(String... args) throws Exception {List < Product > sku = productService.getSku("NEX.6");logger.info("result of getSku is {}", sku);}public static void main(String[] args) throws Exception {SpringApplication.run(BootMongoDB.class, args);} }

如果您連接到mongodb實例,并且sku與您搜索的名稱匹配,那么您將看到一個或多個產品。 我們所做的是非常基本的。 如果我要更復雜的查詢怎么辦? 例如,如果我想要一個特定的SKU,其可用性等于“ 1”? 我不能不使用一些@Query魔術來做到這一點。 所以我要更新我的DAO類。

public interface ProductRepository extends MongoRepository < Product, String >{public List < Product > findBySku(String sku);@Query(value = "{sku: ?0, availability : 1}")public List < Product > findBySkuOnlyAvailables(String sku); }

我為mongodb提供了直接查詢,其中方法簽名中的sku將插入查詢中的“?0”并將被發送到mongodb。 您可以先更新服務,然后再更新主要方法以查看其是否有效。 如果您對mongodb的語法不太熟悉,那么您可能不喜歡編寫可讀性不強的查詢。 然后是時候添加自定義DAO類了。 除了自動生成的方法外,無法向ProductRepository添加和使用其他方法。 因此,我們將添加幾個類,并提供一個不錯的精選方法。 我們的存儲庫類名為“ ProductRepository”。 我們將添加一個名為“ ProductRepositoryCustom”的新接口和一個新方法,該方法將為給定名稱找到可用的骨架(findBySkuOnlyAvailables方法的雙胞胎)。

public interface ProductRepositoryCustom {public List < Product > findBySkuOnlyAvailablesCustom(String sku); }

然后為此提供一個實現。 在下面,您看到我們注入了ProductRepositoryCustom的mongotemplate并對其進行了處理。 我們創建兩個條件。 第一個用于sku名稱,第二個用于可用性。

public class ProductRepositoryImpl implements ProductRepositoryCustom {@Autowiredprivate MongoTemplate mongoTemplate;public List < Product > findBySkuOnlyAvailablesCustom(String sku) {Criteria criteria = Criteria.where("sku").is(sku). andOperator(Criteria.where("availability").is(1));return mongoTemplate.find(Query.query(criteria), Product.class);} }

定制實現的最后一步是ProductRepository類的更新。 正如您在下面看到的,我唯一需要的更新是添加了ProductRepositoryCustom,以便我們可以將它們鏈接在一起。 所有這些命名聽起來都有些愚蠢。 但是請注意,盡管自定義接口的名稱并不重要,但是實現名稱的更改將導致引發異常:

Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property only found for type String! Traversed path: Product.sku.

要解決此問題,請確保實現類的名稱為“ ProductRepositoryImpl”,這是擴展MongoRepository和“ Impl”的接口名稱的串聯。

public interface ProductRepository extends MongoRepository < Product, String>, ProductRepositoryCustom

如果我們將新方法添加到服務層:

@Service public class ProductService {@Autowiredprivate ProductRepository repository;public List < Product > getSku(String sku){return repository.findBySku(sku);}public List < Product > getAvailableSkuCustom(String sku){return repository.findBySkuOnlyAvailablesCustom(sku);} }

然后更新我們的主類的run方法:

public void run(String... args) throws Exception {List < Product > sku = productService.getSku("NEX.6");logger.info("result of getSku is {}", sku);List < Product > availableSkuCustom = productService.getAvailableSkuCustom("NEX.6");logger.info("result of availableSkuCustom is {}", availableSkuCustom);}

同樣,您必須在日志中看到一些內容! 您可以在github上檢查整個項目。

翻譯自: https://www.javacodegeeks.com/2014/05/rocking-with-mongodb-on-spring-boot.html

總結

以上是生活随笔為你收集整理的在Spring启动时与mongodb一起摇摆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。