今天有遇到需要用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);
以上两种方式经验证都可以实现数据转换