java jooq

Java EE附带了自己的持久性API:JPA。 当您想要将RDBMS实体(表/关系)映射到Java实体(类)时,JPA最强大,主要遵循1:1映射策略。 其背后的思想是,业务逻辑通常不像关系代数或SQL那样真正面向集合,而是面向记录的,这意味着将业务规则和业务逻辑应用于单个记录。

换句话说,当SQL和关系代数与值(元组)有关时,JPA与(单个记录的)身份和状态有关。 这就是JPA的亮点,因为:

寿命太短,无法使用SQL编写CRUD

但是正如加文·金(Gavin King)经常说的:

RDBMS不仅仅与CRUD有关

加文·金(Gavin King)在开始研究最流行的JPA实现Hibernate时就已经意识到了OLAP的炒作。 商业智能或当今称为数据科学的技术比简单的CRUD依赖更高级的功能-简单的JPA规范或其实现从未将其作为目标。

实际上,您不必一定要执行OLAP才能从本机SQL中受益,在更普通的OLTP环境中也会出现更简单的用例,例如

  • 报告中
  • 批量和批量数据处理
  • 查询复杂的业务规则

尽管JPA提供了JPQL和Criteria API,它将帮助您表达查询中的一些复杂性,但是您最终将受到这些语言和API提供的功能的限制,正如Michael Simons最近在有趣的Criteria API与jOOQ比较中所记录的那样 。

因此,所有JPA实现都提供了一种使用“本地SQL”查询数据库的方法。 在先前的博客文章中,我们展示了如何利用jOOQ的类型安全DSL API通过JPA的本机查询API运行SQL查询 ,然后获取结果……

  • ……作为管理实体
  • …作为使用SqlResultSetMapping映射的DTO

在上述情况下,jOOQ仅用作SQL查询构建器 ,而查询执行则留给JPA。

在Java EE中使用jOOQ进行所有数据库查询

记住jOOQ的理念 :

jOOQ本质上是类型安全的JDBC。 而已。

即使可以使用JPA执行本机SQL,也不必这样做。 您可以直接在JDBC级别上进行操作,这是JPA经常需要执行的操作,例如在工作时…

  • ……具有特定于供应商的数据类型
  • ……使用非平凡的存储过程
  • …与语句批处理
  • …带有可更新的游标

在应用程序服务器上运行应用程序时,可以选择所需的功能,其余部分使用专有的API(例如在JDBC之上运行的jOOQ)。 例如,您可以使用:

  • 用于会话和范围管理的EJB
  • CDI用于依赖项注入
  • jOOQ与您的数据库交互

(您也可以将JTA添加到堆栈中-为简单起见,我们暂时将其跳过)

该过程很简单:只需使用CDI将javax.sql.DataSource注入到会话bean中即可:

@Stateless
public class LibraryEJB {@Resource(lookup="java:data-source-configuration")private DataSource ds;
}

…并开始使用JDBC进行操作:

public List<Author> fetchAuthors()
throws SQLException {List<Author> result = new ArrayList<>();// Get a Connection from the injected DataSourcetry(Connection con = ds.getConnection();PreparedStatement stmt = con.prepareStatement("SELECT * FROM AUTHOR ORDER BY ID");ResultSet rs = stmt.executeQuery()) {result.add(new Author(rs.getInt("ID"),rs.getString("FIRST_NAME"),rs.getString("LAST_NAME")));}return result;
}

…或使用jOOQ:

public Result<AuthorRecord> fetchAuthors() {// Pass the injected DataSource to jOOQreturn DSL.using(ds, H2).selectFrom(AUTHOR).orderBy(AUTHOR.ID).fetch();
}

请注意,jOOQ (默认情况下)如何将所有结果急切地获取到内存中 ,并急切地关闭诸如JDBC ConnectionPreparedStatementResultSet类的资源,这样就无需您自己去处理资源管理的麻烦。

再次:

jOOQ本质上是类型安全的JDBC。 而已。

出于各种原因,JDBC一直是Java EE应用程序的重要组成部分,包括对供应商特定功能的访问。 jOOQ在JDBC的基础上增加了编译时类型的安全性。 而已。 与JDBC兼容的任何东西都可以与jOOQ兼容。

特别是,无论您做出何种选择,jOOQ都不会干扰您的事务或会话模型。 jOOQ所需要的只是一个JDBC ConnectionDataSource

在JBoss WildFly中运行示例

例如,可以从GitHub检出以上示例,然后直接在WildFly中运行-或在其他Java EE应用程序服务器中进行少量改动即可: https : //github.com/jOOQ/jOOQ/tree/master/jOOQ-examples / jOOQ-javaee-example

该示例是在与Arun Gupta举行的网络研讨会中为WildFly创建的。 网络研讨会回答以下问题:

  • 什么是jOOQ?
  • 有JDBC和JPA时为什么要使用JOOQ?
  • 它如何与Java EE应用程序配合? 它使用底层的JPA持久性提供程序还是其他一些连接?
  • 通过JPA的利弊? 纯冬眠?
  • 它的缩放程度如何?
  • 在Java EE应用程序中显示代码示例
  • jOOQ用于基于CRUD或领域丰富的应用程序?
  • 最终如何将jOOQ中的所有工作整合到JPA中并进行标准化? 还是更多的JDBC?

完整的网络研讨会可以在YouTube上找到,这里:

翻译自: https://www.javacodegeeks.com/2015/10/a-beginners-guide-to-using-java-ee-with-jooq.html

java jooq

java jooq_将Java EE与jOOQ结合使用的初学者指南相关推荐

  1. 将Java EE与jOOQ结合使用的初学者指南

    Java EE附带了自己的持久性API:JPA. 当您想要将RDBMS实体(表/关系)映射到Java实体(类)时,JPA最强大,主要遵循1:1映射策略. 其背后的想法是,业务逻辑通常并不像关系代数或S ...

  2. 浅谈Java SE、Java EE、Java ME三者的区别

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  3. Java SE和Java EE应用的性能调优

    凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就,你得超越"花似雾中看"的状态, ...

  4. JDK版本Java SE、Java EE、Java ME的区别

    想在win7 X64上搭建JAVA开发环境来着(只是尝试下),打开JAVA 官网下载JDK,发现好多版本懵了,百度了下找到这些版本的区别,故有了下文 1.JAVA SE Java2平台标准版(Java ...

  5. Java SE、Java EE、Java ME基本区别

    Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...

  6. java jsf_将Java 8日期时间API与JSF和Java EE 7结合使用

    java jsf 如果您将Java 8与Java EE 7一起使用,则在尝试利用某些Java 8新功能时可能会遇到一些怪癖. 一个这样的怪癖是,默认情况下,新的Date-Time API不适用于许多J ...

  7. Java SE、Java EE、Java ME三者的区别

    说得简单点 Java SE 是做电脑上运行的软件. Java EE 是用来做网站的-(我们常见的JSP技术) Java ME 是做手机软件的. 1. Java SE(Java Platform,Sta ...

  8. Java SE到Java EE的学习转换

    我接触java的学习是从Java SE开始的,SE部分主要是用来做桌面程序的开发,在现在的主流趋势中已经渐渐的退出了中心舞台.现在人们对网络的认知和通过网络接收信息大部分都是碎片化的,因此各种网页就成 ...

  9. 浅谈Java SE、Java EE、JME的关系

    Java SE.Java EE.JME是Java的三个版本.他们的关系可以用下图表示 想要进一步认识他们的区别,我们先来看一下他们详细的英文名称 Java SE (Java Platform, Sta ...

最新文章

  1. R语言switch语句语法、实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题
  2. ocs(office communications server)通讯簿无法同步的问题集锦及解决方法
  3. ZooKeeper的API操作(二)(通俗易懂)
  4. Design Pattern - Interpreter(C#)
  5. python安装modify setup选哪-python 之禅 import this
  6. 《Total Commander:万能文件管理器》——第8.3节.张学思版预装的插件
  7. 大话云计算——认识云——“瑞友杯”虚拟化征文
  8. BZOJ1555 KD之死
  9. [ASP.NET 控件实作 Day14] 继承 CompositeControl 实作 Toolbar 控件
  10. Vue010_ 过滤器
  11. ubuntu16.04+xfce4截图、终端调出、锁屏的快捷键设置、去掉Alt+鼠标移动屏幕的功能、安装thunar、小键盘问题、设置终端背景
  12. SpringBoot2.1.5(16)--- Spring Boot的日志详解
  13. CCIE学习(40)—— OSPF设计与LSA类型(三)
  14. Spring 学习一 @Autowired
  15. 细菌的天敌抗生素,如何利用这把救命的双刃剑?
  16. Spring Boot 中的 HttpClient 新贵 Retrofit !
  17. man查询括号中的数字含义
  18. ios-跳转到苹果自带地图进行导航
  19. Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享
  20. Python 架设网站

热门文章

  1. POJ3734-Blocks【EGF】
  2. jzoj4245-er【dp,贪心】
  3. 欢乐纪中某B组赛【2019.1.18】
  4. codeforces1467 E. Distinctive Roots in a Tree(树上差分)
  5. 【图论】Tree之最小方差树(bzoj 3754)
  6. Scala与Java差异(二)之条件控制与循环
  7. 所有和Java中代理有关的知识点都在这了
  8. MySQL concat()函数
  9. Spring 注入内部 Beans
  10. JS 获取浏览器、显示器 窗体等宽度和高度