加快数据库调用的最佳方法来了!

照片:Mike van den BosonUnsplash

我们经常会遇到这样的情况:虽然我们的实体有另一个实体的映射,但我们需要使用该实体,并通过急迫加载获得其所有相关的映射。这些情况主要出现在我们有大量的数据库调用,我们需要减少调用的数量,从而减少总的时间。不用担心! **JOIN FETCH**来拯救我们吧!

那么,让我们先看一下数据。

在这个例子中,我创建了两个表 **部门**和 雇员 一个部门可以有很多员工,但一个员工只能属于一个部门。

让我们先看一下数据。

部门表

雇员表

现在让我们来看看 **部门**和 **雇员**java类。

medium.com/media/13e45…medium.com/media/412ee…

我希望你关注的主要内容是映射和获取类型。正如我们可以看到在 部门 类中,雇员是用一个列表进行一对多的双向映射的。这是用 **@OneToMany**注解来完成的,而且需要注意的是,获取的类型是懒惰的。另外,在这个 雇员 类中,我们在部门变量上添加了一个 **@ManyToOne**注释,该注释将雇员与他们的部门联系起来。

所以,在我深入研究 **JOIN FETCH**之前,我只想谈一谈JOIN的例子,从控制台的输出中,我们可以发现被调用的次数。

当我们使用 JOINfindAll()方法来获取所有的部门和他们相关的用户,我们使用以下方式。

medium.com/media/ca214…medium.com/media/cc63a…

对于所使用的两种风格,下面提到的Hibernate查询被生成。

medium.com/media/f833f…

我们可以看到,首先运行一个SQL查询来获得所有的部门,然后对每个部门运行一个SQL查询来获得该部门的相应员工。

最后,如果使用控制器来显示结果,则看起来像。

medium.com/media/a96e8…

那么,如何优化这个问题呢?

那么通过使用 JOIN FETCH!

所以。 **JOIN FETCH**基本上删除了所有额外的调用,以获取一个特定部门的所有员工,但在一个单一的DB调用中完成!。

medium.com/media/8cb2b…

结论

因此,很明显, **JOIN FETCH**加快了你的数据库调用,我们可以利用这个属性 **连接FETCH**的这一属性,在关联类型为 懒惰 但我们需要的数据是以 热情 方式的数据。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享