接收实体自定义
JPA 除使用Entity接收结果外,还可以使用以下三种方式接收数据库返回实体
- 基于接口
- 基于DTO
- 动态字段
点击查看Spring 官方文档
1基于接口
public interface CustomizedDto{
String getId() ;
String geName();
Integer getAge();
}
使用示例
@Query(value = "select u.id as id, u.name as name, u.age as age
from tb_user u
where u.id = ?1",
nativeQuery = true)
CustomizedDto findUserById(String id);
2基于DTO
DTO定义
class NamesOnly {
private final String firstname, lastname;
NamesOnly(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
String getFirstname() {
return this.firstname;
}
String getLastname() {
return this.lastname;
}
// equals(…) and hashCode() implementations
}
3动态字段
接口定义
interface PersonRepository extends Repository<Person, UUID> {
<T> Collection<T> findByLastname(String lastname, Class<T> type);
}
使用示例
void someMethod(PersonRepository people) {
Collection<Person> aggregates =
people.findByLastname("Matthews", Person.class);
Collection<NamesOnly> aggregates =
people.findByLastname("Matthews", NamesOnly.class);
}