[英]Optimization in constructor parameters
我將參數直接設置到 DTO 中,我們從 HQL 獲得 output
以下是 HQL:
@Query(value = "SELECT new com.test.vos.CustomerDetails(firstname, lastName, address1, address2, address3, id, companyName, companyAddress, otherDetails) "
+ "FROM MstCustomer mc "
+ "INNER JOIN mc.mstAddress md "
+ "INNER JOIN mc.MstCompany mComapny "
+ "WHERE mc.mobileNo = :mobileNo ")
public List<CustomerDetails> getCustomerDetails(@Param("mobileNo") Integer mobileNo);
DTO:
public class CustomerDetails {
private String firstName;
private String lastName;
private String address1;
private String address2;
private String address3;
private String id;
private String companyName;
private String companyAddress;
privatr String otherDetails;
public CustomerDetails(String firstName, String lastName, String address1, String address2, String address3, String id, String companyName, String companyAddress, String otherDetails) {
super();
this.firstName = storeCode;
this.lastName = lastName;
this.address1 = address1;
this.address2 = address2;
this.address3 = address3;
this.id = id;
this.companyName = companyName;
this.companyAddress = companyAddress;
this.otherDetails = otherDetails;
}
// Getter and Setter
}
最重要的是,代碼運行良好,唯一的問題是它顯示的構造函數有 9 個參數,大於 7 個授權。
如何解決該警告? 什么是最好的方法?
使用Builder 模式在構造函數中獲取一個參數(builder)
private CustomerDetails(CustomerDetailsBuilder builder) {
// ... set all fields using builder
public static class CustomerDetailsBuilder
//...update all parameters and build method
這使用了一個額外的 class UserBuilder,它幫助我們構建所需的用戶 object,其中包含所有必需屬性和可選屬性的組合,而不會失去不變性。
例如
CustomerDetails customerDetails = new CustomerDetails.CustomerDetailsBuilder("Lokesh", "Gupta")
.address1("street 1")
.address2("Floor 2")
.address3("Fake address 1234")
.build();
另一種選擇是龍目島的@AllArgsConstructor
生成一個全參數構造函數。 全參數構造函數需要 class 中的每個字段都有一個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.