提问者:小点点

我如何以及在哪里获得DTO对象


我不明白什么时候需要通过SQL查询直接获得DTO的投影,什么时候需要使用实体


共1个答案

匿名用户

Spring Repository允许存储库中的DTO使用构造函数投影(例如使用select new语法时)。根据我的说法,最好的用例是性能。

看看这篇文章为什么接口投影比使用Hibernate的Spring Data JPA中的构造函数投影和实体投影慢得多?

它比较了所有类型的预测:

  1. 实体投影
  2. 构造函数投影
  3. 界面投影
  4. 元组投影
  5. 动态投影

结果如下:

Entity projections took 161.61 ms on average out of 100 iterations.
Constructor projections took 24.84 ms on average out of 100 iterations.
Interface projections took 252.26 ms on average out of 100 iterations.
Tuple projections took 21.41 ms on average out of 100 iterations.
Dynamic projections took 23.62 ms on average out of 100 iterations.
-----------------------------------------------------------------------
One iteration retrieved (from DB) and projected 100 000 objects.
-----------------------------------------------------------------------

如您所见,构造函数投影确实比实体或接口投影更快。所以如果你需要速度,你必须在存储库中使用DTO(即使这是好的或坏的做法……)

此外,一个好的和胖的JPQL DTO查询避免了著名的n 1 Hibernate请求问题。