jOOQ配置

本文是我们学院课程的一部分,标题为jOOQ –类型安全的数据库查询 。

在SQL和特定关系数据库很重要的Java应用程序中,jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多,JDBC过多时,这是一种替代方法。 它显示了一种现代的领域特定语言如何可以极大地提高开发人员的生产率,从而将SQL内部化为Java。

在本课程中,我们将看到如何使用jOOQ有效地查询数据库。 在这里查看 !

目录

1.简介 2. ConnectionProvider 3. SQLDialect 4.设定 5. ExecuteListeners
5.1。 示例ExecuteListener

1.简介

有多种SPI( 服务提供商接口 ),可用于管理jOOQ中各种实体的生命周期。 可以通过Configuration对象注入这些SPI。 在本节中,我们将学习这些生命周期管理对象如何与jOOQ交互。

也可以从org.jooq.academy.section4包中获得本节中显示的示例 。

2. ConnectionProvider

最重要的SPI是为jOOQ提供JDBC Connection SPI。 到目前为止,在示例中, Connection已直接传递到DSL.using()方法:

DSLContext dsl = DSL.using(connection);

对于更详细的变体(将connection包装在DefaultConnectionProvider此符号只是一个方便:

DSLContext dsl = DSL.using(new DefaultConfiguration().set(new DefaultConnectionProvider(connection)));

在比本教程更复杂的设置中,您可能希望为jOOQ提供一个DataSource ,例如在使用Connection池时,甚至在通过JTA使用分布式事务时。 还通过便利方法以本机方式支持涉及DataSources流行用例(尽管您需要提供SQLDialect ,因为它不能从DataSource派生。

DSLContext dsl = DSL.using(dataSource, SQLDialect.H2);

如果您希望实现任何其他类型的JDBC Connection源,则可以实现自己的ConnectionProvider

public interface ConnectionProvider {// jOOQ will acquire a connection through this method prior to query executionConnection acquire() throws DataAccessException;// jOOQ will release previously acquired connections again through this method after query executionvoid release(Connection connection) throws DataAccessException;
}

3. SQLDialect

jOOQ将在具体的SQLDialect上下文中生成并执行您的SQL语句。 运行以下程序时,可以通过示例来最好地说明这一点:

// This renders SELECT 1 / SELECT 1 FROM DUAL in various SQL dialect families
Arrays.stream(SQLDialect.families()).map(family -> String.format("%9s : ", family) + DSL.using(family).render(DSL.selectOne())).forEach(System.out::println);

当您执行上述程序时,您可能会得到类似以下内容的信息:

ACCESS : select 1 as [one] from (select count(*) dual from MSysResources) as dualASE : select 1 [one]CUBRID : select 1 "one" from "db_root"DB2 : select 1 "one" from "SYSIBM"."DUAL"DERBY : select 1 as "one" from "SYSIBM"."SYSDUMMY1"FIREBIRD : select 1 "one" from "RDB$DATABASE"H2 : select 1 "one" from dualINFORMIX : select 1 "one" from (select 1 as dual from systables where tabid = 1) as dualINGRES : select 1 "one" from (select 1 as dual) as dualHSQLDB : select 1 as "one" from "INFORMATION_SCHEMA"."SYSTEM_USERS"MARIADB : select 1 as `one` from dualMYSQL : select 1 as `one` from dualORACLE : select 1 "one" from dualPOSTGRES : select 1 as "one"SQLITE : select 1 one
SQLSERVER : select 1 [one]SYBASE : select 1 [one] from [SYS].[DUMMY]

这些语句都是从相同的jOOQ DSL表达式DSL.selectOne() 。 在大多数情况下,您无需担心各种SQL方言之间的细微差别,因为jOOQ会在单个API中将它们抽象出来。

您的SQLDialect是否支持任何给定的jOOQ API元素,可以从大多数DSL方法上的@Support注释中看出。 采用DSL.denseRank()方法,该方法为DENSE_RANK()窗口函数建模。 在jOOQ API中声明为:

@Support({ CUBRID, DB2, INFORMIX, POSTGRES, ORACLE, SQLSERVER, SYBASE })
public static WindowOverStep<Integer> rank() { ... }

4.设定

设置用于向jOOQ提供有关常规查询呈现和执行行为的信息。 它们受XSD的控制,可从以下位置获得:XSD: http : //www.jooq.org/xsd/jooq-runtime-3.3.0.xsd (请查看最新手册或网站以获取潜在更新)

在其当前版本中,jOOQ设置包含用于管理…的标志。

  • 表是否应完全使用架构限定
  • 表和模式是否应该转换/映射(例如,实现多租户)
  • 是否应引用模式,表和列名称(例如,以支持区分大小写的名称)
  • 生成的SQL关键字是大写还是小写
  • 是否应格式化生成的SQL(例如用于调试日志记录)
  • 绑定值应呈现为问号,命名参数还是内联
  • 应该执行静态语句还是预备语句
  • 执行记录是否处于活动状态
  • 乐观锁定是否处于活动状态
  • 活动记录是否应保留对产生它们的Configuration的引用
  • 活动记录是否具有可更新的主键
  • 是否应该缓存反射信息

5. ExecuteListeners

ExecuteListener是几个SPI( 服务提供者接口)之一 ,您可以使用它们在更高层次上连接jOOQ的查询呈现,变量绑定和执行生命周期。 以下示例显示了一种简单的方法,可以根据每个查询衡量查询执行时间。

示例ExecuteListener

ExecuteListener listener = new DefaultExecuteListener() {@Overridepublic void start(ExecuteContext ctx) {// Register the start time to the current contextctx.data("time", System.nanoTime());}@Overridepublic void end(ExecuteContext ctx) {// Extract the start time from the current contextLong time = (Long) ctx.data("time");System.out.println("Execution time : " + ((System.nanoTime() - time) / 1000 / 1000.0) + "ms. Query : " + ctx.sql());}
};

然后可以在Configuration使用此侦听Configuration ,如下所示:

DSL.using(new DefaultConfiguration().set(SQLDialect.H2).set(new DefaultConnectionProvider(connection)).set(new DefaultExecuteListenerProvider(listener))).select(AUTHOR.ID).from(AUTHOR).fetch();

现在,对fetch()的调用将启动整个查询执行生命周期,包括已实现的start()end()回调。 这将导致在控制台上显示以下内容:

Execution time : 0.101ms. Query : select "PUBLIC"."AUTHOR"."ID" from "PUBLIC"."AUTHOR"

针对特定用例还有其他SPI。 有关这些的详细信息,请参阅jOOQ手册 。

翻译自: https://www.javacodegeeks.com/2015/09/the-jooq-configuration.html

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

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

相关文章

可隐藏选项卡html,隐藏HTML中选定选项卡的底部边框

我有一个水平HTML选项卡&#xff0c;其中我希望隐藏所选选项卡的底部边框。隐藏HTML中选定选项卡的底部边框这个问题已经被问here和here但这两种解决方案都不能正常工作&#xff0c;因为我使用一个div结构&#xff0c;没有太大的JavaScript。jQuery(.tab-links a).on(click, fu…

JWT攻击手册

JSON Web Token&#xff08;JWT&#xff09;对于渗透测试人员而言可能是一种非常吸引人的攻击途径&#xff0c;因为它们不仅是让你获得无限访问权限的关键&#xff0c;而且还被视为隐藏了通往以下特权的途径&#xff1a;特权升级&#xff0c;信息泄露&#xff0c;SQLi&#xff…

DIV+CSS 入门

玩一小会儿前csdn什么时候&#xff0c;页面上的加qq而微博&#xff0c;我认为这是美好的。牛腩完成。运营商也开始了他真正的学习B/S之旅。刚開始的时候&#xff0c;我不知道<div>是什么 也不清楚CSS用来干什么的&#xff0c;敲完了回过头来再看&#xff0c;好像明确了一…

教你玩转CSS Overflow

目录 CSS Overflow overflow: visible CSS 布局 - Overflow CSS overflow 属性用于控制内容溢出元素框时显示的方式。 <style>#overflowTest {background: #4CAF50;color: white;padding: 15px;width: 80%;height: 100px;overflow: scroll;border: 1px solid #ccc;}&l…

了解Callable和Spring DeferredResult

1.简介 Servlet 3.0中引入的异步支持提供了在另一个线程中处理HTTP请求的可能性。 当您有一个长期运行的任务时&#xff0c;这特别有趣&#xff0c;因为当另一个线程处理此请求时&#xff0c;容器线程将被释放并可以继续处理其他请求。 关于这个主题的解释已经很多次了&#x…

html表单复选框样式,美化表单——自定义checkbox和radio样式

如果你对本站比较观注的话&#xff0c;应该很清楚&#xff0c;前面就有这方面的介绍。因为大家都知道表单中的部分元素如果单单使用CSS是没办法完成的&#xff0c;所以最近花全力在学习这方面的制作。在本站有关于这样制作有好几个教程了&#xff0c;比如说&#xff1a;我主要是…

BZOJ 3436: 小K的农场( 差分约束 )

orz云神...真的给跪了...BFS版spfa T 掉了...然后DFS版的就A了...我现在很迷茫....这就是个普通的差分约束... ------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include<algorithm>#incl…

教你玩转CSS Float(浮动)

目录 什么是 CSS Float(浮动)? 元素怎样浮动 彼此相邻的浮动元素 清除浮动 - 使用 clear CSS 中所有的浮动属性 什么是 CSS Float(浮动)? CSS 的 Float(浮动),会使元素向左或向右移动

CORS同源策略

同源策略 什么是同源策略&#xff08;Same Origin Policy&#xff09;&#xff1f;什么是跨域?什么是域名? 什么是同源策略&#xff08;Same Origin Policy&#xff09;&#xff1f; 所谓同源策略&#xff0c;所谓同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端口…

把html文件变成php,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼生成静态文件除了2楼所说的ob缓存方法之外&#xff0c;还有一种方法就是通过使用模板替换技术实现(正则表达式)header("content-type:text/html;charsetutf-8");//处理添加、修改、删除请求//1.接收一下oper$oper$_REQUE…

[转]hadoop新手错误解决方法

解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 等一系列问题&#xff0c;ljavalangstring 一&#xff0e;简介 Windows下的 Eclipse上调试Hadoop2代码&#xff0c;所以我们在windows下的Eclipse配置hadoop-eclipse-plugin-2.6…

教你玩转CSS 居中

目录 元素居中对齐 文本居中对齐 图片居中对齐 左右对齐 - 使用定位方式 左右对齐 - 使用 float 方式 垂直居中对齐 - 使用 padding

JSFinder—从js文件中寻找敏感接口和子域名

说在前面 在渗透测试及漏洞挖掘过程中&#xff0c;信息搜集是一个非常重要的步骤。而在网站的JS文件中&#xff0c;会存在各种对测试有帮助的内容。 比如&#xff1a;敏感接口&#xff0c;子域名等。 社区内的文章也有有些关于JS文件提取信息的片段&#xff0c;比如Brupsuit…

spring 测试 事务_Spring陷阱:事务测试被认为是有害的

spring 测试 事务Spring杀手级功能之一是容器内集成测试 。 尽管EJB多年来一直缺乏此功能&#xff08;Java EE 6终于解决了这个问题&#xff0c;但是我尚未进行测试&#xff09;&#xff0c;但是Spring从一开始就允许您从Web层开始&#xff0c;通过所有服务来测试整个堆栈。到数…

HTML页面加载和解析流程详细介绍

浏览器加载和渲染html的顺序1. IE下载的顺序是从上到下&#xff0c;渲染的顺序也是从上到下&#xff0c;下载和渲染是同时进行的。 2. 在渲染到页面的某一部分时&#xff0c;其上面的所有部分都已经下载完成&#xff08;并不是说所有相关联的元素都已经下载完&#xff09;。 3.…

计算机四级必背知识点,2019年6月计算机四级数据库工程师必备考点

【导语】2019年6月计算机四级考试备考正在进行中&#xff0c;为了方便考生及时有效的备考&#xff0c;那么&#xff0c;无忧考网为您精心整理了2019年6月计算机四级数据库工程师必备考点&#xff0c;希望对您备考有帮助。如想获取更多计算机等级考试的模拟题及备考资料&#xf…

教你玩转CSS 组合选择符

目录 后代选择器 子元素选择器 相邻兄弟选择器 后续兄弟选择器 CSS组合选择符包括各种简单选择符的组合方式。 在 CSS3 中包含了四种组合方式: 后代选择器(以空格分隔)子元素选择器(以大于号分隔)相邻兄弟选择器(以加号分隔)普通兄弟选择器(以破折号分隔)后代选择器 …

真香系列-JSFinder实用改造

前言JSFinder是一款优秀的github开源工具&#xff0c;这款工具功能就是查找隐藏在js文件中的api接口和敏感目录&#xff0c;以及一些子域名。 github链接&#xff1a; Code1https://github.com/Threezh1/JSFinder

远程桌面无法找到计算机不属于指定网络,远程桌面找不到计算机

这是我第一次尝试设置一些虚拟机。 我正在尝试rdp给他们&#xff0c;但我遇到了这个错误This is my first attempt in setting up some VMs. I am trying to rdp to them but Im encountering this error**远程桌面无法找到计算机"\[服务器\]"。 这可能意味着"\…

使用API​​密钥(aka身份验证令牌)部署到Maven Central

如何在不使用未加密本地密码的情况下与Maven Central / Nexus通信&#xff08;尤其是使用Gradle&#xff0c;但不仅限于此&#xff09;。 基本原理 不幸的是&#xff0c;Gradle&#xff08;和许多其他构建工具&#xff09;没有提供任何机制来本地加密密码&#xff08;或至少编…