java 读取 dto_如何通过Spring Data/EntityManager/Session直接获取DTO数据?

我们从数据库中提取数据,才能确定应用程序的执行方式。为了构建最佳的提取计划,我们需要了解每种提取类型。直接获取数据是最简单的,无需编写任何显式SQL查询语句,并且在我们知道实体主键时非常有用。

如何通过通过Spring Data EntityManager和Hibernate Session示例直接获取?

关键点:

通过Spring Data直接获取, findById()

通过EntityManager直接获取 EntityManager#find()

通过Hibernate直接获取 Session#get()

源代码可以在这里找到

通过Spring Data Projections获取DTO

获取比所需数据更多的数据是导致性能损失的最常见问题之一。获取实体而无意修改它们也是一个坏主意。我们可以通过Spring Data Projections(DTO)仅从数据库中获取所需的数据。

假设对于实体User我们只想提取其中的name和city,做成一个DTO对象返回,实体User的代码:

@Entity

public class User implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

private String surname;

private String city;

private String country;

private long ssn;

private int age;

关键点:

编写一个包含getter的接口(投影),仅用于应从数据库中提取的列

public interface UserNameAndCity {

String getName();

String getCity();

}

写一个返回的正确查询List:

@Repository

public interface UserRepository extends JpaRepository {

@Transactional(readOnly = true)

List findFirst2BySurname(String surname);

}

如果可能,限制返回的行数(例如,via LIMIT)。在这里,我们可以使用Spring Data存储库基础结构中内置的查询构建器机制

调用:

List users = userRepository.findFirst2BySurname("Francisco");

logger.info(() -> "Number of users:" + users.size());

for (UserNameAndCity user : users) {

logger.info(() -> "User:" + user.getName() + ", " + user.getCity());

}

源代码可以在这里找到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值