jooq 生成数据库_jOOQ类型安全数据库查询教程

jooq 生成数据库

课程大纲

SQL是用于关系数据库查询的功能强大且表达能力强的语言。 SQL已建立,标准化并且几乎不受其他查询语言的挑战。 但是,在Java生态系统中,自JDBC以来,几乎没有采取任何相关措施来更好地将SQL集成到Java中。 在更高层次上,所有关注都集中在对象关系映射和语言抽象上,例如OQL,HQL,JPQL,CriteriaQuery。 同时,这些抽象已经变得几乎和SQL本身一样复杂,无论它们给无法修补生成SQL的DBA带来的麻烦是什么。 jOOQ是双重许可的开源产品,填补了这一空白。 它在Java中将SQL本身实现为内部特定于域的语言,从而允许类型安全的构造和执行任意复杂度SQL语句。 其中包括嵌套选择,派生表,联接,半联接,反联接,自联接,别名以及许多特定于供应商的扩展,例如存储过程,数组,用户定义的类型,递归SQL,分组集,数据透视表,窗口函数和许多其他OLAP功能。 jOOQ还包括一个源代码生成器,使您可以非常高效地在诸如Eclipse之类的现代IDE中编译查询。

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

关于作者

Lukas是位于瑞士苏黎世的Data Geekery GmbH的创始人兼首席执行官。 自2013年以来,Data Geekery一直在销售围绕Java和SQL的数据库产品和服务。

自2006年在EPFL攻读硕士学位以来,Lukas着迷于Java和SQL的交互。 他通过各种变体(JDBC,Hibernate,主要是Oracle)在瑞士电子银行领域获得的大部分经验。 他在各种会议,JUG,内部演示和公司博客上分享他的知识。

经验教训

在本课程中,我们将讨论如何通过创建示例项目来入门jOOQ,H2和Maven。

jOOQ是一种DSL(领域特定语言),它模仿Java API中的标准和特定于供应商SQL语法。 作为内部DSL,Java编译器可以验证您SQL查询的语法正确性(例如,SQL关键字的正确顺序)。 使用表和列作为生成的Java对象,编译器还可以验证元数据的正确性(例如,正确的列名和类型)。 在本课程中,我们将深入研究jOOQ DSL,并使用谓词,语句和构建表达式。

在本课程中,我们将了解如何对Active Records执行CRUD。 编写CRUD既无聊又重复,这就是为什么像Hibernate这样的ORM出现并成功提高开发人员生产力的原因。 但是,当您经常只想对表中的单个记录进行操作时,Hibernate对您的体系结构进行了许多假设(和限制)。 jOOQ知道“活动记录”或UpdatableRecords,可以将其装入“特殊”种类的SELECT语句,然后在内部跟踪脏标志。 我们将学习如何执行简单的活动记录操作以及如何使用乐观锁定。

在本课程中,我们将比较jOOQ与JDBC。 JDBC通常因冗长而受到批评。 JDBC也因选择了错误的“默认值”而受到批评,例如,默认的结果集的延迟实现。 我们将看到jOOQ如何改进对检查异常,结果集,Prepared语句和带有结果集的语句的批评。

在本课程中,我们将学习生命周期管理对象如何与jOOQ交互。 有多种SPI(服务提供商接口),可用于管理jOOQ中各种实体的生命周期。 可以通过配置对象注入这些SPI。 我们将看到如何使用ConnectionProvider,在特定SQLDialect上下文中jOOQ如何生成和执行SQL语句,以及如何使用Settings为jOOQ提供有关常规查询呈现和执行行为的信息。

请确保转发此消息,让您的社交粉丝知道!

翻译自: https://www.javacodegeeks.com/2015/09/jooq-type-safe-db-querying.html

jooq 生成数据库

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

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

相关文章

C语言实现通讯录附详细代码(动态+静态)

点击蓝字关注我们一、通讯录简介实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:添加联系人信息删除指定联系人信息查找指定联系人信息修改指定联系人信息显示所有联系…

Lua协程Coroutine是什么

Lua协程Coroutine是什么协程和线程不同: 同一时刻,一个多线程程序可以用多个线程同时执行;而协程只能有一个在执行多线程是抢占式的;而协程是非抢占式的,只有协程显示被挂起,才会被挂起 协程和线程的相同…

请使用复选框选择_使用可选是可选的

请使用复选框选择在上周“收藏中的可选内容”的文章发表之后,我不禁要多讲一些关于同一只野兽的事情。 更多细节。 最初由Google Guava引入并后来包含在Java 8软件包中的Optionial类只是包装可选对象的包装器。 从包装对象存在或包装中没有对象的意义上讲&#xff…

python爬去百度图片_python实现爬取百度图片的方法示例

本文实例讲述了python实现爬取百度图片的方法。分享给大家供大家参考,具体如下: import json import itertools import urllib import requests import os import re import sys wordinput("请输入关键字:") path"./ok" …

C++程序的内存分区模型-栈区堆区

点击蓝字关注我们1、栈区:由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死”)注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放栈区代码演示&#xff…

CocosStudio的节点如何使用自定义shader

CocosStudio的节点如何使用自定义shader问题:我想对CocosStudio 的 某个UI 里的 某个图片(如下图所示的Image类型)使用自定义shader。但是,我把 对传统的cc.Sprite应用自定义shader的方式 应用于它时,并不生效&#xf…

concurrency_Java Concurrency Essentials教程

concurrency课程大纲 并发一直是开发人员面临的挑战,编写并发程序可能非常困难。 引入并发性时,可能会发生很多事情,并且系统的复杂性会大大增加。 但是,编写健壮的并发程序的能力是开发人员的必备工具,并且可以帮助构…

excel随机抽取_简单随机抽样及其进阶分层随机抽样方法展示

一、分享简单随机抽样的几种方法1、抽样分析工具抽样2、INDIRECTRANDBETWEEN函数抽样3、RAND排序抽样4、SAS抽样二、分层抽样方法1、Python分层抽样2、SAS分层抽样3、EXCEL函数及功能分层抽样简单随机抽样的几种方法方法一抽样分析工具抽样如果你的EXCEL尚未安装数据分析&#…

为什么存在动态内存分配,动态内存函数(malloc函数,free函数,calloc函数,realloc函数)...

点击蓝字关注我们1.当前我们知道的内存的使用方法2.为什么存在动态内存分配如上我们已学的开辟空间的方式有两个特点:空间开辟的大小是固定的必须指定数组的长度所以就产生了空间开大了浪费开小了不够用的问题,所以使用动态内存分配3.动态内存函数&#…

论游戏项目中的左与右

标题《论游戏项目中的左与右》 何为左与右?左,左倾,即 激进主义,冒险主义,盲动主义。右,右倾,即 消极主义,保守主义,投降主义。 (一)先说说关于…

java处理注释_Java注释处理器

java处理注释本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题,包括对象创建,并发,序列化,反射等。 它将指导您完成Java掌握的旅程! 在这里查看 !…

C++ vector类的模拟实现

点击蓝字关注我们1.前言vector和string虽然底层都是通过顺序表来实现的,但是他们利用顺序表的方式不同,string是指定好了类型,通过使用顺序表来存储并对数据进行操作,而vector是利用了C中的泛型模板,可以存储任何类型的…

visual studio源文件的编译顺序是依据什么?

问题:visual studio源文件的编译顺序是依据什么? 结论:依据 .vcxproj 文件里 指定了ClCompile的ItemGroup ,如下图所示,就是这么简单粗暴。

并发运行的最佳实践_并发最佳实践

并发运行的最佳实践本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题,包括对象创建,并发,序列化,反射等。 它将指导您完成Java掌握的旅程! 在这里查看 &#…

功能齐全的屏幕截图C++实现详解

点击蓝字关注我们1、概述要使用屏幕截图,其实很容易,装一款聊天软件或者办公软件就可以了,比如QQ、企业微信、钉钉、飞书等。但要开发出类似这些软件的屏幕截图模块,则没那么容易。其实实现屏幕截图的技术并不复杂,主要…

如何判断exe文件是debug还是release编译生成的

如何判断exe文件是debug还是release编译生成的结论: 用IDA工具打开exe,然后看Imports里面的依赖库是否有带d或D结尾的,如果有就说明是Debug的 实验:(实验环境 vs2017, IDA工具) (0&…

大屏可视化分配率是什么意思_什么是分配率?

大屏可视化分配率是什么意思诸如“不可持续的分配率”和“您需要保持较低的分配率”之类的短语似乎仅属于Java Champions的词汇表。 复杂,恐怖并被魔术光环包围。 经常发生的情况是,当您更仔细地查看概念时,魔术会随着抽烟消失。 这篇文章试…

C/C++语言动态开辟的杨辉三角

点击蓝字关注我们问题引入杨辉三角相必大家并不陌生,第1行有1列、第二行有2列…第n行有n列,且每行行首和行尾的值都为1,其余的值为上一行两数相加我们在C语言阶段,第一次碰到的杨辉三角应该都是用常规的二维数组存储,可…

git gui 历史版本_这些Git命令都不会,还是不要去面试了

前言以下,项目中经常使用的Git命令,汇总到这里以便与你能快速的学习和掌握Git命令,在文章最后有惊喜哟,一定要看到最后啊!使用的 Git版本:git version 2.24.0命令git log# 输出概要日志,这条命令等同于# gi…

java restful_Java EE中的RESTful计时器

java restful在这篇文章中...。 EJB计时器旋风之旅 通过带有示例实现的简单REST接口即时使用EJB计时器 更新(2015年7月14日) 该应用程序的前端现在可以在OpenShift上使用 。 由于我是前端新手,因此我在其他来源的帮助下组装了此HTML5 Ang…