jooq代码生成
我们可能在本教程的第一部分中还记得jOOQ指出
jOOQ从您的数据库生成Java代码,并允许您通过其流畅的API构建类型安全SQL查询。
本教程的第一部分描述了如何配置使用jOOQ的Spring驱动的应用程序的应用程序上下文,但没有描述如何使用jOOQ创建类型安全SQL查询。
这篇博客文章使我们更接近解决方案。 如果要使用jOOQ构建类型安全的数据库查询,则必须对数据库进行反向工程,并创建代表不同数据库表,记录等的类。 这些类是类型安全SQL查询的构建块。
幸运的是,jOOQ提供了一种自动执行此过程的简便方法 。 这篇博客文章描述了如何使用Maven生成所需的类。
让我们开始吧。
补充阅读:
- 使用Maven创建配置文件特定的配置文件说明了如何使用Maven构建配置文件为不同的环境创建不同的配置。 通过使用此博客文章中描述的方法来配置此博客文章的示例应用程序。
- 将jOOQ与Spring结合使用:配置是本教程的第一部分,它描述了您可以配置使用jOOQ的Spring应用程序的应用程序上下文。 您无需阅读本教程的第一部分就可以理解该博客文章,但是,如果您想在Spring支持的应用程序中真正使用jOOQ,建议您也阅读该博客文章。
用Maven生成代码
我们的构建过程分为三个重要阶段,如下所述:
- 从特定于配置文件的配置文件中读取数据库配置 。 我们希望为我们的应用程序和构建脚本使用相同的配置文件,因为这有助于我们避免重复。 更新数据库架构并从数据库生成代码时,需要数据库连接详细信息。
- 如果需要,更新数据库架构 。 因为我们要从数据库生成代码,所以我们必须确保在代码生成开始之前已更新其架构。
- 从数据库生成代码 。 此阶段从已配置的数据库中读取元数据,并创建用于使用jOOQ编写类型安全的数据库查询的类。
让我们继续前进,找出如何在pom.xml文件中配置这些阶段。
从配置文件特定的属性文件中读取属性
我们可以使用Properties Maven插件从特定于配置文件的属性文件中读取属性。 该插件读取属性文件的内容,并确保我们可以在pom.xml文件中使用其属性。
我们可以按照以下步骤配置此插件:
- 将插件声明添加到pom.xml文件的plugins部分。
- 创建一个在初始化 Maven生命周期阶段运行read-project-properties目标的执行。
- 确保从特定于配置文件的配置文件( profile / $ {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插件。 我们可以按照以下步骤进行操作:
- 将插件声明添加到pom.xml文件的plugins部分。
- 如果skip.db.creation属性的值为true,请确保跳过模式生成。
- 创建一个在生成源 Maven生命周期阶段运行执行目标的执行 。
- 通过执行以下步骤配置创建的执行:
- 配置JDBC驱动程序,数据库url,用户名和密码。
- 确保更改是自动提交的。
- 配置用于创建数据库架构SQL脚本的位置。
- 添加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插件。 我们可以按照以下步骤进行操作:
- 将插件声明添加到pom.xml文件的plugins部分。
- 创建一个在生成源 Maven生命周期阶段运行jOOQ-codegen Maven插件的生成目标的执行。
- 请按照以下步骤配置插件:
- 配置JDBC连接并设置驱动程序类的名称,数据库url,用户名和密码。 请记住,实际属性值是从特定于配置文件的配置文件中读取的。
- 通过执行以下步骤来配置用作源的数据库:
- 确保从jooq.generator.db.dialect属性中读取了使用的数据库方言。
- 配置代码生成以包括从PUBLIC模式中找到的所有表。
- 配置代码生成以生成数据库表和记录的类 。
- 配置目标软件包和目录。 以下描述了这些配置选项:
- 目标软件包指定该软件包,它是所创建类的根软件包。
- 目标目录指定生成类的目录。
- 添加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
jooq代码生成