最近使用JPA的时候,碰到需要自定义查询结果集的场景,网上搜了一下,都是需要自定义方法写一大串代码实现的,太繁琐了,有那时间还不如用mybaits。用JPA就是要尽量通过声明接口解决持久层问题,要不然鬼用。逼得没办法去了官网看看文档,再没有就放弃了,没时间看源码。最终找到我想要的结果了。
例如,传统的JPA接口实现如下所示:
class Person {
@Id UUID id;
String firstname, lastname;
Address address;
static class Address {
String zipCode, city, street;
}
}
interface PersonRepository extends Repository<Person, UUID> {
Collection<Person> findByLastname(String lastname);
}
自定义对象接收查询结果集方法如下:
(1)增加接收数据接口
interface NamesOnly {
String getFirstname();
String getLastname();
}
(2)增加持久层接口
interface PersonRepository extends Repository<Person, UUID> {
Collection<NamesOnly> findByLastname(String lastname);
}
如果要对查询结果进行序列号的话就会有点问题: