今天有遇到需要用JPA查詢數據,並將結果轉換到DTO的場景,找到了兩種方法,這里記錄一下
其中實體類為:
@Data @Entity @Table(name = "CLASSIFY_PERSON") public class ClassifyPerson { @Id private String id; @Column private String classifyId; @Column private String accountNo; @Column private String name; }
一、本地SQL+接口方式
1.需要定義結果接口:
public interface Person{ String getAccountNo(); String getName(); }
2.定義查詢
@Query(value = "select account_no as accountNo, name from CLASSIFY_PERSON where classify_id = ?1", nativeQuery = true) List<Person> findByClassifyId(String classifyId);
二、HQL+DTO方式
1.定義DTO類(model包下):
@Data @AllArgsConstructor public class PersonDTO { private String accountNo; private String name; }
2.定義查詢
@Query(value = "select new model.PersonDTO(accountNo, name) from ClassifyPerson where classifyId = ?1")
List<PersonDTO> findByClassifyId(String classifyId);
以上兩種方式經驗證都可以實現數據轉換
