繁体   English   中英

jOOQ和缓存?

[英]jOOQ and Caching?

我正在考虑从Hibernate转移到jOOQ,但我不确定如果没有缓存我是否可以做到。 Hibernate有一级和二级缓存 我知道jOOQ确实支持重用准备语句

如果我使用jOOQ,我是否必须自己处理缓存?

查询缓存/结果缓存:

我之所以提到这一点,因为Hibernate也可以使用这种缓存,在某些情况下它可能是有意义的。

在Hibernate中,查询缓存与二级缓存密切配合。 在jOOQ中,您可以使用jOOQ VisitListener API实现拦截所有查询的查询缓存。 有一些关于这个主题的博客文章:

将来会有更好的支持这种类型的缓存(不是在jOOQ 3.7中),因为这种缓存属于SQL API。 请注意,您的JDBC驱动程序可能也支持这种缓存 - 例如ojdbc。

一级缓存:

Hibernate的第一级缓存背后的想法对于像jOOQ这样更面向SQL的API没有意义。 SQL是一种高度复杂的语言,可以在实际持久化的实体和相同实体的客户端表示之间起作用。 这意味着一旦使用SQL,您可能会创建与数据的原始实体表示无关的特殊元组。

换句话说:只有在限制查询语言的功能和范围时,才能实现一级缓存,如果您控制所有数据库交互,就像Hibernate一样。 jOOQ明确表示不这样做。

二级缓存:

Hibernate中的二级缓存是一个缓存,主要用于主数据和类似类型的数据,从数据库中提取数据几乎没有意义,因为数据不会改变。

没有任何理由,为什么ORM应该实现这种缓存,在简单的情况下不方便。 但在许多情况下,最好使用@Cacheable注释服务方法,例如,如本春季页面所述 这将是更高层上的缓存,而不是ORM /查询层上的缓存,您可以将缓存与业务逻辑更紧密地关联。

是的你将会。 jOOQ只是一种类型安全的SQL方法,不进行任何缓存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM