将jOOQ与Spring结合使用:代码生成

我们可能在本教程的第一部分中还记得jOOQ指出

jOOQ从您的数据库生成Java代码,并允许您通过其流畅的API构建类型安全的SQL查询。

本教程的第一部分描述了如何配置使用jOOQ的Spring驱动的应用程序的应用程序上下文,但没有描述如何使用jOOQ创建类型安全的SQL查询。

这篇博客文章使我们更接近解决方案。 如果要使用jOOQ构建类型安全的数据库查询,则必须对数据库进行反向工程并创建代表不同数据库表,记录等的类。 这些类是类型安全SQL查询的构建块。

幸运的是,jOOQ提供了一种自动执行此过程的简便方法 。 这篇博客文章描述了如何使用Maven生成所需的类。

让我们开始吧。

补充阅读:

  • 使用Maven创建配置文件特定的配置文件说明了如何使用Maven构建配置文件为不同的环境创建不同的配置。 通过使用此博客文章中描述的方法来配置此博客文章的示例应用程序。
  • 将jOOQ与Spring结合使用:配置是本教程的第一部分,它描述了您可以配置使用jOOQ的Spring应用程序的应用程序上下文。 您无需阅读本教程的第一部分就可以理解该博客文章,但是,如果您想在基于Spring的应用程序中真正使用jOOQ,建议您也阅读该博客文章。

用Maven生成代码

我们的构建过程分为三个重要阶段,如下所述:

  1. 从特定于配置文件的配置文件中读取数据库配置 。 我们希望为我们的应用程序和构建脚本使用相同的配置文件,因为这有助于避免重复。 更新数据库架构并从数据库生成代码时,我们需要数据库连接详细信息。
  2. 如果需要,更新数据库模式 。 因为我们要从数据库生成代码,所以我们必须确保在代码生成开始之前已更新其架构。
  3. 从数据库生成代码 。 此阶段从已配置的数据库中读取元数据,并创建用于使用jOOQ编写类型安全的数据库查询的类。

让我们继续前进,找出如何在pom.xml文件中配置这些阶段。

从配置文件特定的属性文件中读取属性

我们可以使用Properties Maven插件从特定于配置文件的属性文件中读取属性。 该插件读取属性文件的内容,并确保我们可以在pom.xml文件中使用其属性。

我们可以按照以下步骤配置此插件:

  1. 将插件声明添加到pom.xml文件的plugins部分。
  2. 创建一个在初始化 Maven生命周期阶段运行read-project-properties目标的执行。
  3. 确保从特定于配置文件的配置文件( profiles / $ {build.profile.id} /config.properties )中读取属性。

Properties Maven插件的配置如下所示:

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-2</version><executions><execution><phase>initialize</phase><goals><goal>read-project-properties</goal></goals><configuration><files><file>profiles/${build.profile.id}/config.properties</file></files></configuration></execution></executions>
</plugin>

让我们继续前进,了解如何更新应用程序的数据库架构。

更新数据库架构

在我们可以从数据库生成任何代码之前,我们必须确保数据库的架构是最新的。 最简单的方法是使用SQL Maven插件 ,该插件可以执行从SQL文件中找到的SQL语句。

在现实生活中的应用程序,你可能想使用两种迁飞或Liquibase用于这一目的。

让我们找出如何确保示例数据库始终是最新的。

首先 ,我们必须创建一个SQL文件,该文件将创建数据库模式。 如果从数据库中找不到该SQL脚本,它将创建todos表。

schema.sql文件如下所示:

CREATE TABLE IF NOT EXISTS todos (id BIGINT AUTO_INCREMENT PRIMARY KEY,creation_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,description VARCHAR(500),modification_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,title VARCHAR(100)
);

其次 ,我们必须在pom.xml文件的properties部分中添加一个skip.db.creation属性。 此属性用于启用和禁用架构更新。 因为我们要在所有配置文件中启用数据库模式更新,所以我们必须将此属性的值设置为false

我们的POM文件的相关部分如下所示:

<properties><skip.db.creation>false</skip.db.creation>
</properties>

第三 ,我们必须配置SQL Maven插件。 我们可以按照以下步骤进行操作:

  1. 将插件声明添加到pom.xml文件的plugins部分。
  2. 如果skip.db.creation属性的值为true,请确保跳过模式生成。
  3. 创建一个在生成源 Maven生命周期阶段运行执行目标的执行
  4. 通过执行以下步骤配置创建的执行:
    1. 配置JDBC驱动程序,数据库url,用户名和密码。
    2. 确保更改是自动提交的。
    3. 配置用于创建数据库架构的SQL脚本的位置。
  5. 添加H2数据库作为此插件的依赖项。

SQL Maven插件的配置如下所示:

<plugin>
<groupId>org.codehaus.mojo</groupId><artifactId>sql-maven-plugin</artifactId><version>1.5</version><configuration><skip>${skip.db.creation}</skip></configuration><executions><execution><id>create-database-h2</id><phase>generate-sources</phase><goals><goal>execute</goal></goals><configuration><driver>${db.driver}</driver><url>${db.url}</url><username>${db.username}</username><password>${db.password}</password><autocommit>true</autocommit><srcFiles><srcFile>src/main/resources/schema.sql</srcFile></srcFiles></configuration></execution></executions><dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.3.174</version></dependency></dependencies>
</plugin>

让我们继续前进,了解如何配置jOOQ-codegen Maven插件。

从数据库生成代码

我们的最后一个任务是配置jOOQ-codegen Maven插件。 让我们找出这是如何完成的。

首先 ,我们必须在pom.xml文件的properties部分添加一个jooq.generator.db.dialect属性。 此属性指定正确的数据库方言,并且用于配置jOOQ-codegen Maven插件。 因为示例应用程序使用H2数据库,所以我们必须将此属性的值设置为org.jooq.util.h2.H2Database

将数据库方言指定为属性的原因是,这使我们可以在不同的环境中使用不同的数据库。

我们的POM文件的相关部分如下所示:

<properties><jooq.generator.db.dialect>org.jooq.util.h2.H2Database</jooq.generator.db.dialect>
</properties>

其次 ,我们必须配置jOOQ-codegen Maven插件。 我们可以按照以下步骤进行操作:

  1. 将插件声明添加到pom.xml文件的plugins部分。
  2. 创建一个执行,该执行在生成源 Maven生命周期阶段运行jOOQ-codegen Maven插件的生成目标。
  3. 请按照以下步骤配置插件:
    1. 配置JDBC连接并设置驱动程序类的名称,数据库url,用户名和密码。 请记住,实际属性值是从特定于配置文件的配置文件中读取的。
    2. 通过执行以下步骤配置用作源的数据库:
      1. 确保从jooq.generator.db.dialect属性中读取了使用的数据库方言。
      2. 配置代码生成以包括从PUBLIC模式中找到的所有表。
    3. 配置代码生成以生成数据库表和记录的类 。
    4. 配置目标软件包和目录。 以下描述了这些配置选项:
      • 目标包指定包,它是所创建类的根包。
      • 目标目录指定生成类的目录。
  4. 添加H2数据库作为此插件的依赖项。

jOOQ-codegen Maven插件的配置如下所示:

<plugin><groupId>org.jooq</groupId><artifactId>jooq-codegen-maven</artifactId><version>3.2.2</version><executions><execution><id>generate-h2</id><phase>generate-sources</phase><goals><goal>generate</goal></goals></execution></executions><dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>${h2.version}</version></dependency></dependencies><configuration><jdbc><driver>${db.driver}</driver><url>${db.url}</url><user>${db.username}</user><password>${db.password}</password></jdbc><generator><database><name>${jooq.generator.db.dialect}</name><includes>.*</includes><excludes></excludes><inputSchema>PUBLIC</inputSchema></database><generate><records>true</records></generate><target><packageName>net.petrikainulainen.spring.jooq.todo.db</packageName><directory>target/generated-sources/jooq</directory></target></generator></configuration>
</plugin>

您可以从jOOQ参考手册中获取有关代码生成的更多信息:

  • 第6章:代码生成
  • 第6.2节:高级生成器配置
  • 第6.3节:自定义生成器策略
  • 第6.7节:生成的表
  • 第6.8节:生成的记录

让我们找出运行代码生成时发生的情况。

产生了什么?

调用jOOQ-codegen Maven插件的生成目标时,它将分析数据库的架构并生成已配置目标目录和包的类。 在我们的情况下,这意味着:

  • 代码将生成到目录target / generation-sources / jooq
  • 生成的类的根包是net.petrikainulainen.spring.jooq.todo.db

我们在此博客文章中创建的配置可确保创建以下类:

  • 生成到net.petrikainulainen.spring.jooq.todo.db包的类包含数据库的元数据。 jOOQ将这些类称为“全局”工件 。
  • net.petrikainulainen.spring.jooq.todo.db.tables.Todos类是一个表类 ,它描述单个数据库表的结构。 我们可以使用此类针对存储在todos数据库表中的数据编写数据库查询。
  • net.petrikainulainen.spring.jooq.todo.db.tables.recods.TodoRecord类是一个记录类 ,其中包含单个表行的信息。 从todos数据库表中获取数据的数据库查询返回TodoRecord对象(如果我们选择这样做)。

摘要

现在,我们已经成功配置了jOOQ-codegen Maven插件,以便从数据库中生成代码。 本教程教了我们两件事:

  • 我们了解了如何配置jOOQ-codegen Maven插件以从数据库生成代码。
  • 我们了解了开始生成代码时将创建什么样的类。

本教程的下一部分描述如何使用jOOQ生成的类将CRUD函数添加到简单的Web应用程序。

  • Github上提供了此博客文章的示例应用程序。

参考:在Petri Kainulainen博客上,我们的JCG合作伙伴 Petri Kainulainen 使用jOOQ和Spring:代码生成 。


翻译自: https://www.javacodegeeks.com/2014/02/using-jooq-with-spring-code-generation.html

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

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

相关文章

php文件上传 github,PHP的cURL文件上传

cURL介绍cURL是一个利用URL语法规定来传输文件和数据的工具&#xff0c;支持很多协议&#xff0c;如HTTP、FTP、TELNET等。PHP也支持cURL 库。本文将介绍 cURL 的一些高级特性&#xff0c;以及在PHP中如何运用它。PHP创建cURL的基本结构1)初始化curl_init()2)设置变量curl_seto…

FormatJS – 让你的 Web 应用程序国际化

FormatJS 是一个模块化的集合&#xff0c;保护各种 JavaScript 国际化库&#xff0c;例如格式化数字&#xff0c;日期和字符串。它包括一组建立在 JavaScript 的国际内置插件和全行业的国际化标准&#xff0c;再加上一套集成的通用模板和组件库。 在线演示 源码下载 您可能…

Javascript执行上下文和执行栈

什么是执行上下文&#xff1f; 执行上下文就是当前JavaScript代码被解析和执行时所在环境的抽象概念&#xff0c;JavaScript中运行任何的代码都是在执行上下文。 什么是执行栈&#xff1f; 执行栈&#xff0c;在其他编程语言中也被叫做调用栈&#xff0c;具有LIFO&#xff08;后…

rsa加密算法python_模拟新浪微博登录(Python+RSA加密算法)

声明&#xff1a;由于本人使用用的是Python语言&#xff0c;以下内容就在该语言下进行解释说明。有使用Java语言的可以参考IT男杂记(http://marspring.mobi/http-client-weibo/)正文&#xff1a;PC登录新浪微博时&#xff0c;在客户端用js预先对用户名、密码都进行了加密&#…

基于swagger进行接口文档的编写

0. 前言 近期忙于和各个银行的代收接口联调&#xff0c;根据遇到的问题&#xff0c;对之前编写的接口进行了修改&#xff0c;需求收集和设计接口时想到了方方面面&#xff0c;生产环境下还是会遇到意想不到的问题&#xff0c;好在基本的执行逻辑已确定&#xff0c;因此只是对接…

教程:编写自己的CDI扩展

今天&#xff0c;我将向您展示如何编写CDI扩展。 CDI提供了一种扩展功能的简便方法&#xff0c;例如 添加自己的范围&#xff0c; 启用Java核心类进行扩展&#xff0c; 使用注释元数据进行扩充或修改&#xff0c; 以及更多。 在本教程中&#xff0c;我们将实现一个扩展&a…

c调用python脚本 效率,尝试用C调用Python脚本#

我正在制作一个迷你Python IDE来好玩。为什么不。所以我希望能够从C调用一个python脚本&#xff0c;现在我只测试一个简单的场景。我知道这不是专业IDE的工作原理。在private void Run_Click(object sender, EventArgs e){run_cmd("C:/Python34/python.exe", "C…

Hyhyhy – 专业的 HTML5 演示文稿工具

Hyhyhy 是创建好看的 HTML5 演示文档的工具。它具备很多的特点&#xff1a;支持 Markdown&#xff0c;嵌套幻灯片&#xff0c;数学排版&#xff0c;兼容性&#xff0c;语法高亮&#xff0c;使用 Javascript API &#xff0c;方便的骨架。它支持 Firefox 2 , Safari 3 , Opera 9…

POJ 1258 Agri-Net (最小生成树)

题目&#xff1a; Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course. Farmer John ordered a high speed connection for his farm a…

python人工智能炒期货_学会用Python结合人工智能尝试预测股票,下一个股神就是你!...

股票市场涨涨跌跌&#xff0c;好像毫无规律&#xff0c;但有一些人却凭借自己的直觉掌握了一些特殊规律&#xff0c;从而实现在股票上的实现斩获。现在在人工智能时代&#xff0c;PythonAI框架&#xff0c;无疑会利用人工智能优势可以对股票市场进行特征学习&#xff0c;抓取比…

JAX-RS 2.0中的透明PATCH支持

PATCH方法是最不受欢迎的HTTP方法之一&#xff0c;因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来&#xff0c;它已经针对JSON进行了标准化&#xff0c;因此有很多库可以为您完成繁重的工作。 出于本博客的目的&#xff0c;我将使用json-patch&#xff0c;尽管可以…

Java开发知识之Java的枚举

Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C中都是用const关键字. 枚举跟C概念都是一样的.就是特定的常量而已. 二丶Java中的枚举 java中的常量.一般都是final定义.但是我们讲过.final定义的常量.初始化的时候可…

linux php7 mongodb,CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis

CentOS 7下安装配置PHP7跟LAMP及MongoDB和Redis我是想能yum就yum&#xff0c;所有软件的版本一直会升级&#xff0c;注意自己当时的版本是不是已经更新了。首先装CentOS 7装好centos7后默认是不能上网的cd /etc/sysconfig/network-scripts/找到形如ifcfg-enp0s3的文件&#xff…

【汇总目录】C#

[2019年04月29日] C# textbox 自动滚动 [2019年02月07日] C#利用VUDP.cs开发网络通讯应用程序 [2019年02月06日] C#利用VINI.cs操作INI文件 [2018年12月19日] 控件数组批量生成控件 转载于:https://www.cnblogs.com/velscode/p/10535101.html

基于 Bootstrap 的响应式后台管理面板

你想建立一个后台管理面板或者分析仪表板吗&#xff1f;不需从头开始&#xff0c;Keen IO Bootstrap 是一个响应式的仪表盘模板&#xff0c;可以帮助你在几分钟内呈现数据&#xff0c;让你可以创建一个有吸引力的&#xff0c;定制的分析仪表板&#xff0c;随时可以展现给你的团…

Java:AspectJ的异常翻译

在这篇博客文章中&#xff0c;我描述了如何使用AspectJ自动将一种异常类型转换为另一种异常类型。 问题 有时&#xff0c;我们处于必须将异常&#xff08;通常由第三方库引发&#xff09;转换为另一种异常的情况。 假设您使用的是诸如hibernate之类的持久性框架&#xff0c;并…

sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据

Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据&#xff0c;本文简单介绍两种方式的pyspark实现。1、Spark Streaming接入Kafka方式介绍Spark Streaming 官方提供了两种方式读取Kafka数据&#xff1a;一是Receiver-based Approach。该种读取模式…

php职业认证,如何用 PHP 进行 HTTP 认证

PHP 的 HTTP 认证机制在 PHP 以 Apache 模块方式运行时才有效&#xff0c;因此该功能不适用于 CGI 版本。在 Apache 模块的 PHP 脚本中&#xff0c;可以用 header() 函数来向客户端浏览器发送“Authentication Required”信息&#xff0c;使其弹出一个用户名/密码输入窗口。当用…

时间服务器

时间服务器配置&#xff1a; 1 安装软件包: [rootlocalhost ~]# yum install ntp –y 2 修改配置文件 [rootlocalhost ~]# vim /etc/ntp.conf # 允许内网其他机器同步时间 192.168.1.0该网段 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 允许任何ip的客户机都可以…

使用 HTML5 Canvas 绘制出惊艳的水滴效果

HTML5 在不久前正式成为推荐标准&#xff0c;标志着全新的 Web 时代已经来临。在众多 HTML5 特性中&#xff0c;Canvas 元素用于在网页上绘制图形&#xff0c;该元素标签强大之处在于可以直接在 HTML 上进行图形操作&#xff0c;具有极大的应用价值。 这里分享一个惊艳的 Canva…