jooq

Hibernate已成为Java生态系统中的事实上的标准,事实上, 如果标准对您很重要 ,并且如果您将JCP与ISO,ANSI,IEEE等置于同一级别,那么Hibernate也是实际的JavaEE标准实现。

本文的目的不是讨论标准,而是讨论愿景。 Hibernate赞同JPA的ORM愿景。 jOOQ拥有SQL强大查询的愿景,因此,为了争辩,让我们互换使用Hibernate / JPA / ORM,就像jOOQ / JDBC / SQL一样。

为什么现在应该有人使用Hibernate的问题经常出现 -正是因为Hibernate是事实上的标准,并且是许多其他框架(例如Grails( 使用GORM,又使用Hibernate ))中的第一个框架选择。

但是,即使是Hibernate的创建者Gavin King,也不认为Hibernate应该用于所有方面

如果是这样,您是否可以考虑任何客观的决策帮助点,何时使用ORM以及何时使用SQL?

高水平的讨论

首先,让我们将讨论提高到更高的水平。 与其在Hibernate和jOOQ之间确定它们各自域的具体实现,不如考虑ORM与SQL以及它们的不同用例。

在确定ORM(例如Hibernate)和SQL(例如jOOQ)之间时,您应该问自己的驱动问题不是项目复杂性问题。 我们一些要求最苛刻的客户正在对具有数千个表/视图的中型架构使用jOOQ。 通常,这些模式被极端标准化,有时甚至部署在多达六个不同的RDBMS上。 jOOQ专为在这些情况下工作而设计,同时也牢记了简单的用例。

因此,与其考虑项目的复杂性,不如问自己以下问题:

  1. 您的数据模型将驱动您的应用程序设计,还是您的应用程序设计将驱动您的数据模型?
    这里的一个主要方面是从数据库是否可以在您的应用程序中生存的角度来考虑您是否“关心”数据库的问题。 很多时候,应用程序来来往往。 它们可能会用Python / JavaScript等重写,直到5年后。 或者,您有多个应用程序访问同一个数据库:Java应用程序,一些Perl脚本,存储过程等。在这种情况下,数据库设计是您项目中的优先事项,而jOOQ在这些设置中工作得非常好。从某种意义上说,您不一定要“关心”您的数据库,而只是想在某个地方“持久化”您的Java域,而这恰好是一个关系数据库,那么Hibernate也许是一个更好的选择-至少在项目的早期阶段,因为您可以轻松地从Entity模型生成数据库架构。
  2. 您将主要从事复杂的阅读和简单的写作,还是从事复杂的写作?
    当阅读很复杂时,SQL确实会发光。 当您联接许多表时,当您在数据库中聚合数据时,当您进行报告时,当您进行批量读取和写入时。 您是从集合论的角度来考虑数据的,例如您的数据整体。 但是,用SQL编写CRUD很无聊。 这就是为什么jOOQ还为您提供了一个ActiveRecord风格的API来处理无聊的部分(当您在单个表上进行操作时(Jason提到过))。但是,如果您的编写变得复杂,即您必须加载一个复杂的对象图,其中包含20个涉及内存的实体,对其进行乐观锁定,以多种不同方式对其进行修改,然后再次将其持久保存,那么SQL / jOOQ将无济于事。 这就是Hibernate最初创建的目的。

意见

我相信数据是永远的。 您应该*始终*假定数据库在应用程序中仍然存在。 重写应用程序(的一部分)比迁移数据库要容易得多。 拥有一个干净且设计良好的数据库架构将始终使项目,特别是复杂项目的收益得到回报。 另请参阅我们先前有关“无模式”数据库的谬误的文章 。

而且,大多数项目实际上完成90%的读取和10%的写入,写入通常并不复杂(在事务中修改2-3个表)。 这意味着大多数时候,不需要Hibernate / JPA的一级和二级缓存解决的复杂性。 人们常常会误解这些功能,而只是关闭缓存,将Hibernate的缓存一直刷新到服务器,从而以错误的方式使用Hibernate。

但是,如果您不确定上述两个决策轴,则可以走中间路线,仅将jOOQ用于报告,批处理等,并将Hibernate用于CRUD –在CQRS(命令查询责任隔离)中: http://martinfowler.com/bliki/CQRS.html )样式。 也有很多jOOQ用户选择了此路径。

进一步阅读

  • 吞吐量与复杂性–什么时候应该使用ORM? 由Mike Hadlow
  • 为什么要使用ORM? 比尔·卡文(Bill Karwin)
  • 是否有充分的理由不使用ORM? 堆栈溢出
  • 为什么要使用ORM? 堆栈溢出

翻译自: https://www.javacodegeeks.com/2015/03/jooq-vs-hibernate-when-to-choose-which.html

jooq

jooq_jOOQ与Hibernate:何时选择哪个相关推荐

  1. jpa 根据主键生成策略获取id_如何在使用JPA和Hibernate时选择id生成策略

    MMTTMM 该API文档都对这个很清楚.所有生成器都实现了org.hibernate.id.IdentifierGenerator接口.这是一个非常简单的界面.一些应用程序可以选择提供自己的专用实现 ...

  2. Hibernate搭建成功!(源码)

    昨天晚上搭建了我的第一个Hibernate框架.感觉挺爽的! 虽然两天还不会连接数据库,昨就把那么帅的东西搞出来了. 感觉很爽,Java真的很好,很强大.我学习Java才一个月左右,我还有许多需要学习 ...

  3. Hibernate各种主键生成策略与配置详解 - 真的很详细啊!!

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  4. Hibernate Tools 学习总结

    Hibernate Tools for Eclipse的使用 http://blog.csdn.net/gaojinshan/article/details/39502509 Hibernate To ...

  5. 【转】Hibernate和IBatis对比

    原文地址:http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, ...

  6. Hibernate依赖包简单介绍

    http://wqbi.itpub.net/post/2966/61574 很多书都没有怎么介绍Hibernate依赖的jar包,这篇文章算是说的比较全吧. Hibernate一共包括了23个jar包 ...

  7. Struts2与Spring、Hibernate三者整合的过程示例

    转载地址:http://www.360doc.com/content/09/0416/09/61497_3148602.shtml# 原来spring配置文件自动生成数据源和整合先后有关系,留着做个提 ...

  8. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

  9. Hibernate各种主键生成策略与配置详解

    为什么80%的码农都做不了架构师?>>>    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibern ...

最新文章

  1. 新的JavaScript库邀请程序员使用Canvas进行创意编程
  2. 存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20
  3. 陈松松:如何锁定细分领域,视频营销才更容易持续做下去
  4. 超级网管员系列图书介绍
  5. 升级Exchange server 2010 SP1至SP3版本相关问题解决方法
  6. 「力扣」509. 斐波那契数【动态规划】详解!
  7. Javascript常用对象的属性和方法
  8. 直播客户端和浏览器使用桌面共享时出现黑屏等问题
  9. 逃避追债?贾跃亭把法拉第未来股权转给了外甥,但他还有5套豪宅! | 焦点
  10. [转]WIN MOBILE UI开发入门
  11. 谈谈我的技术专家之路
  12. oracle磁带的使用期限,存储的损耗 关于磁带寿命的一些探讨
  13. 微信引流常用几大技巧
  14. 系统架构设计师-软件水平考试(高级)-论文-架构风格
  15. vue SEO的解决方案
  16. 计算机组装活动感悟,电脑组装员实习体会感想-最新版
  17. springboot+dubbo+validation 进行 rpc 参数校验
  18. 利用MS的CASTEP模块计算铁磁性铁声子谱
  19. 连接远程redis的详细步骤
  20. 如何设计一个好的仪表盘:Dundas Dashboard设计思路

热门文章

  1. P3702-[SDOI2017]序列计数【矩阵乘法】
  2. ssl初一组周六模拟赛【2018.4.21】
  3. 【状压DP】滚榜(P7519)
  4. 【并查集】家族 (ssl 1896)
  5. jar包天天见,可是你知道它的运行机制吗
  6. 汇编语言(二十八)之统计单词
  7. BufferedInputStream与ImageInputStream
  8. 以吃货的角度理解 IaaS,PaaS,SaaS 是什么
  9. 三个剩两个,两个剩一个,最后一个都没剩下。
  10. 日常技术分享 : 一定要注意replcaceAll方法,有时候会如你所不愿!