当前位置: 首页 > article >正文

jOOQ所应用的场合,使用价值以及开发本框架的原因

jOOQ的使用价值——对比JPA

Java和SQL已经有一定的历史,和取得很大的进步。 SQL这种语言已经"古老", 依旧一直投入使用的,且是便于理解的技术。 java也已经历史悠久,也是一项遗产。 尽管他的虚拟机允许很多新的,现代的语言可以基于虚拟机而构建。依旧,很多年过去了, 处理SQL和java之间的库接口出现和消失,留下JPA成为一种标准,带着一种怀疑感,也没有其他选择了。

到目前为止, 在其他语言中,能够重视SQL, 把SQL作为一等公民的数据库抽象层框架和几乎没有。很多的框架,包括企业标准的JPA, EJP, Hibernate, JOD, Critera Query, 以及其他框架都尝试隐藏SQL本身,把SQL的操作缩小到最小,例如JPQL,HQL,JDOOL和各式各样的其他查询语言。

jOOQ的出现,就是要填充这个缝隙——非常方便的操作,把SQL作为一等公民。

jOOQ的出现原因——与LINQ比较

其他平台, 参杂了一些想法, 例如LINQ(LINQ-to-SQL),或者Scala的SLICK,或Java的QueryDSL更好的把他们的一些查询概念集成到了各自的语言当中。 通过查询,他们明白了任意目标的查询,例如SQL,XML,集合和很多其他数据存储。 jOOQ声明,这也是一种错误的方式。

在更高级的查询使用用例(不紧急是简单的增删改查或者关联查询),人们希望从SQL的表现力上获利。 这归结于关系型SQL语言的自然表达力,这完全与面向对象和部分函数式语言不同,例如C#, Scala, 或者Java能够提供的。

按照传统的方式表达和校验连接,以及专门的为他们创造的数据表表达类型是非常难的。 当你想要支持更加先进的表表达方式是更加难的,例如汇总表,未嵌套的游标, 或仅仅是从继承表而来的任意的数据投射(projection)。如果使用强大的面向对象数据模型,这些特性似乎超出了这个范围。

本质上, 创建API,让他们看起来像SQL, 或者其中有部分像C#, Scala, Java的决策, 是一个明确的决定,而用来支持一个或其他平台。 然而,就像SLICK的进化, 作为LINQ以相似的方式去进化是较为容易的(或者java世界的QueryDSL),SQL的特性范围,被非常清晰的去以当下的意图去与SQL数据库进行沟通交换信息在这些框架中是非常难的添加特性的(例如,如何对Oracle的分区外连接语法进行建模? 如何对ANSI/ISO SQL:1999分组集进行建模?如何支持标量子查询缓存?等)

jOOQ的出现就是为了填充这个缝隙。

jOOQ的出现原因——与SQL/JDBC比较

为什么不直接使用SQL? 不行吗?

SQL能够被以文本的方式写入并传递给JDBC的API。这些年过去了,人们开始对这样的应用程序变得越来越谨慎和小心翼翼,这归结于很多原因:

  • 并无类型安全
  • 无安全语法
  • 无绑定之对于索引安全
  • 冗长的SQL字符串连接
  • 对于索引技术,非常令人厌烦的绑定值
  • 处理JDBC冗余的源和异常处理。
  • 一个“状态性的”, 不是完全面向对象的JDBC API, 是很难用的

很多原因,在过去, 其他框架也尝试以一种或多种的方式抽象JDBC。不幸的是, 很多也完全抽象了SQL。

JOOQ的出现也是填充这个缝隙。

jOOQ是有所不同的

SQL不是针对业务模型抽象的,SQL被限定在繁重的映射器的狭窄边界中, 隐藏了关系型数据库的美妙和简易性。SQL从来都不是面向对象的。 SQL除过SQL本身,就是SQL, 除此之外没有别的。

如下为jOOQ的学习大纲的思维导图:drawOn


http://www.kler.cn/a/153861.html

相关文章:

  • fastapi 调用ollama之下的sqlcoder模式进行对话操作数据库
  • 商业iOS端路由架构演进
  • 前后端学习
  • Python世界:力扣题110,平衡二叉树判别,easy
  • Python设计模式详解之5 —— 原型模式
  • android 如何获取当前 Activity 的类名和包名
  • vue v-permission权限指令
  • 【滑动窗口】将X减到0的最小操作数
  • .[[backup@waifu.club]].wis勒索病毒数据怎么处理|数据解密恢复
  • Performance性能检测
  • Unity3d 灯光阴影开启,法线贴图出现BUG
  • 单片机学习1——点亮一个LED灯
  • 如何基于gensim和Sklearn实现文本矢量化
  • Linux系统---环境变量+内核进程调度队列(选学)
  • 使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
  • 小白备战蓝桥杯:Java基础语法
  • eclipse Unsupported Content Type
  • react之ReactRouter的使用
  • Jayway JsonPath-提取JSON文档内容的Java DSL | 京东物流技术团队
  • windows本地dockr的clickhouse链接本地mysql服务,连接不上
  • Mininet学习记录(常用命令+创建网络拓扑+OpenDaylight显示拓扑结构)
  • IntelliJ IDEA安装使用教程#intellij idea
  • SQL Server 数据库,为products表添加数据
  • UVA1368 DNA Consensus String
  • 一种excel多线程并发写sheet的方案
  • ESP32-Web-Server编程-CSS 基础 2