jOOQ与Hibernate:何时选择哪个

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

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

为什么现在应该使用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,该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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux怎么才能算telnet成功_怎么表白才算成功呢

要怎样表白才算成功呢?其实如果对方也有点喜欢你的,对你有点感觉的,不管怎样表白,你都会成功的,相反,如果对方本身就对你没感觉的,不管你要怎么轰轰烈烈的表白,你都不会成功。下面&a…

我们真的仍然需要32位JVM吗?

即使到了今天(2015年),我们仍然有两个版本或Oracle HotSpot JDK –已调整为32或64位体系结构。 问题是我们是否真的想在服务器甚至笔记本电脑上使用32位JVM? 我们应该有很受欢迎的意见! 如果只需要较小的堆&#xff0c…

html js点击字图片下拉,JavaScript实现文字与图片拖拽效果的方法

本文实例讲述了JavaScript实现文字与图片拖拽效果的方法。分享给大家供大家参考。具体实现方法如下:JavaScript实现文字与图片的拖拽效果*{padding:0;margin:0;}.tips{position:absolute;background:#eee;}图片可以拖动脚本之家拖动链接也可以var $idfunction(id){r…

html设置页面的高度和宽度,web显示页面有图像上设置高度和宽度很重要

因此即使浏览器只有HTML,它仍然能够分配适当的空间。所以我们可以修改成以下内容:最近我们发现谷歌浏览器对图片设置有一定的修改,它主要在图像上进行设置width和设置height属性,以防止布局发生变化并改善网站访问者的体验。Web性…

磁盘空间管理工具FolderSizes

现在的硬盘已经到了用TB来计量的级别,但也会感觉在不知不觉间空间竟然不够用了!到底什么东西占用了我们这么多的磁盘空间呢? 这个软件可以帮你快速进行分析。FolderSizes 企业版是一款优秀的磁盘管理工具,它可以有效地帮助我们快速的查看并统…

vscode修改python终端_panda3d是python的一个高级的3D 渲染和游戏开发框架

1 介绍1.1 开发维护者:迪士尼VR工作室和卡耐基梅隆娱乐技术中心。1.2 是一个3D游戏引擎和一个 3D 渲染和游戏开发库。1.3 可以在这个框架下使用 Python 和 C 。1.4 Panda3D 是开源软件, 它的许可证让它可以用于任何用途, 包括商业用途。1.5 是python的三…

HTMl和css项目总结,HTML+CSS项目开发总结

好几天没更新博客了,刚实战完一个HTMLCSS的简单项目。经过几天的摸索,发现收益良多。之前只是单纯得写demo,看知识点,没有亲自实战项目。但实战过后才会了解,如何才能更好地提升自己的技术。针对这次项目开发&#xff…

HDU--4768

题目&#xff1a; Flyer 原题链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4768 分析&#xff1a;二分。只需要注意到最多只有一个为奇数&#xff0c;则可以首先求出学生获得的总的传单数&#xff0c;为奇数时&#xff0c;二分找到答案。 1 #include<cstdio&…

js return的值取不到_【JS基础】隐式转换(一)

开篇JS作为一门动态语言十分灵活&#xff0c;但是伴随而来的弱类型隐式转化的问题让我们十分头疼。隐式作为一个大课题&#xff0c;很难用一个很简短的篇幅把JS的隐式转换讲解的十分清楚。所以我选择用多次少量的策略进行梳理&#xff0c;争取让你每看完一篇都会有加深对于JS隐…

语句 查询每个人每个科目的最高分_转行数据分析师专栏(SQL篇)-05多表查询...

数据表&#xff08;4张&#xff09;及数据情况&#xff1a;搭建数据表数据参考&#xff1a;空杯希望&#xff1a;转行数据分析师专栏&#xff08;SQL篇&#xff09;-01SQL入门​zhuanlan.zhihu.com一、表的加法1、先新建一个表course1&#xff08;和course表数据结构一致&#…

plsql 设置鼠标行执行_如何制作键盘鼠标产品质量合格证

鼠标前盘属于办公用品套装&#xff0c;一般会一起销售&#xff0c;但是也不排除分开销售&#xff0c;无论是哪种方式键盘鼠标在生产销售时都需要携带对应产品质量合格证&#xff0c;对产品进行简单的说明&#xff0c;更能保障消费者的权益。那么如何制作产品质量合格证呢&#…

第四章例4-2

/* 输入一批学生的成绩&#xff0c;以负数作为结束标志&#xff0c;计算平均成绩&#xff0c;并统计不及格人数 */ #include<stdio.h> int main(void) {int count,num;double grade,total;num0;total0;count0;printf("Enter grades:");scanf_s("%lf"…

html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...

Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样&#xff0c;编写一次&#xff0c; 然后在其他View中被反复使用。一般放在"Views/Shared"文件夹中以共享。创建Partial View&#xff1a;一般直接右键"Vie…

svm核函数gamma参数_非线性SVM与核函数

前面几篇我们介绍的都是线性支持向量机&#xff0c;换句话说&#xff0c;我们总可以用一条线或一个超平面将数据进行分割。如下图所示&#xff1a;但在更多情况下&#xff0c;有些数据是无法进行线性分割的。比如下面的例子&#xff1a;也就是说&#xff0c;你永远无法用一条直…

anychart说明文档

今天学习anychart&#xff0c;在慧都控件网上看有关文档&#xff0c;模仿试着做了个demo&#xff0c;发现慧都空间网的“Flash图表AnyChart应用教程六&#xff1a;创建圆形仪表”里的指针“<pointer type"bar" value"35" color"Gray" />”…

h5 神策埋点_咕咚技术总监唐平麟:神策使我们的数据平台成本降低约 75%,迭代效率提升 2~3 倍...

在这个数据爆炸的时代&#xff0c;数据成为各行各业出奇制胜的法宝&#xff0c;运动行业也不例外&#xff0c;那么大数据对运动业有什么价值呢&#xff1f;咕咚作为智能运动的倡导者和先行者&#xff0c;致力于成为全球领先的运动大数据和服务平台&#xff0c;现已为超过 1.5 亿…

JavaFX,Jigsaw项目和JEP 253

因此&#xff0c; Java 9可能会破坏您的代码 …… 如果您的项目使用JavaFX&#xff0c;则这尤其可能&#xff0c;因为许多自定义项和自制控件都需要使用内部API。 借助Project Jigsaw&#xff0c;这些内容将无法在Java 9中访问。幸运的是&#xff0c; Oracle在几天前宣布了 JE…

ios 获取是否静音模式_果粉感动:部分iOS“新功能”早已被安卓玩坏

一年一度的WWDC大会如期举行&#xff0c;今年不仅展示了全新的iOS、iPadOS以及macOS。当然&#xff0c;具体更新了什么相信早已经被各大媒体报道出来&#xff0c;本文并不是重复报道&#xff0c;相反的&#xff0c;iOS经过了13代的发展&#xff0c;有开创性的动作&#xff0c;也…

怎么把桌面计算机隐藏文件,怎么隐藏桌面文件夹名称?隐藏桌面图标下的文字的详细教程...

怎么隐藏桌面文件夹名称&#xff1f;桌面图标一多就会显得很凌乱&#xff0c;特别有的软件名称很长&#xff0c;那么有没有什么方法可以让桌面看起来很清爽呢&#xff1f;当然是有&#xff0c;去掉桌面应用的名称不就简洁清爽了&#xff1f;下面就教大家不利用第三方软件的情况…

window xp系统安装php环境_Windows Server 2003及XP系统如何安装SQL Server 2000数据库?

年头年初节假日就是小编的梗&#xff0c;忙得不可开交&#xff0c;这不越冷越刮风昨天服务器又崩了&#xff0c;折腾了一天安装好Windows Server 2003和IIS(这系统是有点老了&#xff0c;主要是单位机子和各系统也有点年头了&#xff0c;没办法)&#xff0c;做好各项配置后总算…