jooq 配置oracle_jOOQ配置
jooq 配置oracle
本文是我们学院课程“ 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中将它们抽象出来。
从大多数DSL方法的@Support
批注中可以看出您的SQLDialect
是否支持任何给定的jOOQ API元素。 采用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
jooq 配置oracle
jooq 配置oracle_jOOQ配置相关推荐
- SpringBoot_配置-自动配置原理
前面说了Springboot的加载位置,我们可以在这四个位置写配置文件,也可以外部配置来进行加载,我们的配置也可以写在外部的这些来源里边,那么他们都能正常工作,而我们演示是从server.port为例 ...
- NFS介绍、NFS服务端配置安装配置、 NFS配置选项、 客户端的配置
NFS介绍 NFS是Network File System的缩写 ,是在网络层面,NFS(Network File System)网络文件系统会经常用到,用于在网络上共享存储.这样讲,你对NFS可能不 ...
- 使用克隆配置任务配置边缘传输服务器角色
环境拓扑: 策略: 实验内容: 1. 订阅第1台边缘服务器到组织中 2. 使用克隆配置任务配置第2台边缘服务器 3. 订阅第2台边缘服务器到组织中 4. 配置DNS服务器进行MX记录轮询 5. 结果 ...
- 【Android Gradle 插件】ProductFlavor 配置 ( multiDexEnabled 配置 | multiDexKeepFile | multiDexKeepProguard )
文章目录 一.ProductFlavor#multiDexEnabled 配置 二.ProductFlavor#multiDexKeepFile 配置 三.ProductFlavor#multiDex ...
- 【Android Gradle 插件】ProductFlavor 配置 ( AppExtension#externalNativeBuild 配置 | cmake 配置 | ndkBuild 配置 )
文章目录 一.ProductFlavor 配置 1.AppExtension#externalNativeBuild 配置 1.AppExtension#externalNativeBuild 配置 ...
- 【Android Gradle 插件】ProductFlavor 配置 ( applicationId 配置 | SdkVersion 相关配置 | version 应用版本配置 )
文章目录 一.ProductFlavor 配置 1.applicationId 配置 2.minSdkVersion 配置 3.targetSdkVersion 配置 4.versionCode 和 ...
- 【Android Gradle 插件】工程根目录下 build.gradle 配置文件 ( 远程仓库配置 | 依赖配置 | 所有子模块配置 | task clean 任务 )
文章目录 一.工程根目录下 build.gradle 配置文件 1.基本作用 2.远程仓库配置 3.依赖配置 3.所有子模块配置 4.task clean 任务 Android Plugin DSL ...
- 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )
OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...
- 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 )
文章目录 一.FFMPEG 源码下载 解压 二.交叉编译工具 三.configure 脚本及帮助命令 四.配置 configure 脚本 五.输出目录配置 六.函数库配置 七.程序配置选项 八.组件配 ...
最新文章
- IDEA热部署基于maven的web项目
- 服务器系统打包,详解Docker 容器基础系统镜像打包
- sqlite 0转换为bit_DA转换实例
- 浅谈ASP.NET的Postback
- 关于微信客服消息 40001和45015 模板消息 errcode:40037 遇到的自己挖的坑
- 单机PC手动更改windows update 地址
- python怎么查询元素是否在列表中_python怎么判断某一元素是否在列表中
- excel文件被写保护怎么解除_u盘被写保护怎么解除,看完你就知道了
- LeetCode 174. 地下城游戏(DP)
- 亿铸科技完成过亿元天使轮融资 指数资本担任独家财务顾问
- cad截图软件_AutoCAD电气制图协会线上CAD学习打卡活动结束
- react实现浏览器自动刷新_react调用什么刷新页面
- Linux 查看 硬件配置
- spark读取gz文件与parquet文件
- MySQL学习(一)脏读、不可重复读、幻读(鸣人和佐助上学的故事)
- Word - 简繁转换功能
- java随笔 2008年
- LED显示屏安装方法
- TypeScript Essential Notes 2 - ES6 Language Features
- 认识和使用热插拔的正确姿势-续