我们可能在本教程的第一部分中还记得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

将jOOQ与Spring结合使用:代码生成相关推荐

  1. jooq代码生成_将jOOQ与Spring结合使用:代码生成

    jooq代码生成 我们可能在本教程的第一部分中还记得jOOQ指出 jOOQ从您的数据库生成Java代码,并允许您通过其流畅的API构建类型安全SQL查询. 本教程的第一部分描述了如何配置使用jOOQ的 ...

  2. jooq 事务_将jOOQ与Spring结合使用:排序和分页

    jooq 事务 JOOQ是一个库,可以帮助我们控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置应用程序的应用程 ...

  3. jooq 分页排序_将jOOQ与Spring结合使用:排序和分页

    jooq 分页排序 JOOQ是一个库,可以帮助我们控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置应用程序的应 ...

  4. jooq权限配置_将jOOQ与Spring结合使用:配置

    jooq权限配置 我遇到了由ORM引起的性能问题. 尽管我不得不承认大多数这些问题确实是由您造成的,但是我开始认为在只读操作中使用ORM是不值得的. 我开始寻找实现这些操作的替代方法. 这就是我遇到j ...

  5. 将jOOQ与Spring结合使用:排序和分页

    JOOQ是一个库,可以帮助我们控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置应用程序的应用程序上下文,如何从 ...

  6. 将jOOQ与Spring结合使用:配置

    我遇到了由ORM引起的性能问题. 尽管我不得不承认大多数这些问题确实是由您造成的,但是我开始认为在只读操作中使用ORM是不值得的. 我开始寻找实现这些操作的替代方法. 这就是我遇到jOOQ的方式 ,它 ...

  7. java中jooq,在Spring中使用jOOQ源码案例

    Spring专题 在Spring中使用jOOQ源码案例 虽然ORM大部分性能问题是由开发者自己引起的,以只读方式使用ORM是不值得的,现在有一种其他可选方式,使用JOOQ,jOOQ从您的数据库生成Ja ...

  8. jooq中record_在Spring中使用jOOQ:CRUD

    jooq中record jOOQ是一个库,可帮助我们重新控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置示例应 ...

  9. 在Spring中使用jOOQ:CRUD

    jOOQ是一个库,可帮助我们重新控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置示例应用程序的应用程序上下文以 ...

最新文章

  1. 二叉树:二叉搜索树的创建和插入
  2. import export php,import与export在node.js中的使用方法
  3. 使用 Castal DynamicProxy 简化 Silverlight 数据绑定
  4. 模块-开发原则以及导入文件时会执行没有缩进的代码
  5. MSF(六):后渗透
  6. MySQL 高可用架构在业务层面的应用分析
  7. 聊一聊promise的前世今生
  8. java在线聊天项目 使用SWT快速制作登录窗口,可视化窗口Design 更换窗口默认皮肤(切换Swing自带的几种皮肤如矩形带圆角)...
  9. ERC20合约标准详解分析
  10. ElementUI:nav收起后点击后出现黑色边框
  11. Java语言基础:常量和变量
  12. 软件开发计划_敏捷软件开发实践:估算与计划读书笔记125第23章 案例分析:Bomb Shelter Studio...
  13. LIBSVM使用方法及参数设置
  14. java关于方法覆盖的叙述_以下关于方法覆盖的叙述中正确的是( )
  15. 数字改造有色金属产业链,发挥产业优势效能
  16. 网络层HTPPS和HTTP的概念与区别
  17. rtmp/rtsp播放器
  18. Test Case Design Method - OATS
  19. 《计算机网络自顶向下方法》笔记
  20. c语言中的正切函数怎么用,C语言中正切的相关函数总结

热门文章

  1. JDBC8.0 URL配置
  2. 有序数组中查找第一个比target大的数
  3. POJ3904(dfs)
  4. apache ignite_Apache Ignite变得简单:第一个Java应用程序
  5. react api_使用Java EE 8中的React式API加速服务
  6. openshift安装_云幸福–如何在几分钟内安装新的OpenShift Container Platform 3.7
  7. java 接口 私有_Java 9:好的,坏的和私有的接口方法
  8. 设计模式示例_责任链设计模式示例
  9. perl大骆驼和小骆驼_快速的骆驼和云消息传递
  10. Spring Boot应用程序浪费了内存