我直接在DTO中设置参数,我们从HQL获得输出
以下是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个。
如何解决该警告?最好的方法是什么?
答案 0 :(得分:3)
使用Builder pattern在构造函数中获取一个参数(构建器)
private CustomerDetails(CustomerDetailsBuilder builder) {
// ... set all fields using builder
public static class CustomerDetailsBuilder
//...update all parameters and build method
这使用了附加的UserBuilder类,该类可以帮助我们构建具有所有必需属性和可选属性组合的所需User对象,而不会失去不变性。
例如
CustomerDetails customerDetails = new CustomerDetails.CustomerDetailsBuilder("Lokesh", "Gupta")
.address1("street 1")
.address2("Floor 2")
.address3("Fake address 1234")
.build();
另一种选择是龙目岛的@AllArgsConstructor
生成一个全参数的构造函数。一个全参数的构造函数为类中的每个字段都需要一个参数。