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

jooq代码生成

我们可能在本教程的第一部分中还记得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. 确保从特定于配置文件的配置文件( 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插件。 我们可以按照以下步骤进行操作:

  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代码生成

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

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

相关文章

【渝粤题库】陕西师范大学151109财务报告分析 作业(高起专)

《财务分析》作业 一、单选题 1.以下哪个不属于杜邦分析法的优点&#xff08; &#xff09;。 2.以下哪个不是比率的具体表现形式&#xff08; &#xff09;。 3.根据财务报表的审计结果&#xff0c;具有较大可信度的审计意见类型是&#xff08; &#xff09;。 4.关于杠杆的…

【渝粤题库】陕西师范大学200131中国古代文论 作业(专升本)

《中国古代文论》作业 一、注明下列文献的作者及年代&#xff1a; 1、《典论论文》 2、《文选序》 3、《戏为六绝句》 5、《与元九书》 6、《送孟东野序》 7、《六一诗话》 8、《雪涛阁集序》 9、《文赋》 10、《诗品》 11、《诗品序》 12、《文心雕龙》 13、《沧浪诗话》 14、…

java连接到mysql_[操作系统]Java如何连接到MySQL数据库的

[操作系统]Java如何连接到MySQL数据库的0 2016-05-01 15:00:15下载&#xff1a;mysql-connector-java-5.1.38.tar.gzhttp://dev.mysql.com/downloads/connector/j/tar zxvfmysql-connector-java-5.1.38.tar.gz解压后zhouspubuntu:~/Downloads$cd ./mysql-connector-java-5.1.38…

Spark Run本地设计模式

现在&#xff0c;许多Spark应用程序已成为遗留应用程序&#xff0c;很难在本地进行增强&#xff0c;测试和运行。 Spark具有很好的测试支持&#xff0c;但仍有许多Spark应用程序不可测试。 当您尝试运行一些旧的Spark应用程序时&#xff0c;我将分享一个常见错误。 Exceptio…

【渝粤题库】陕西师范大学201771 中国古代文学(一) 作业

《中国古代文学&#xff08;一&#xff09;》作业 一、单选题&#xff08;共30小题&#xff0c;每题2分&#xff0c;共60分&#xff09; 1、先秦以“笔法”、“微言大义”著称于世的史书是&#xff08; &#xff09; A《尚书》 B《国语》 C《春秋》 D《战国策》 2、汉代“四家诗…

mave本地导入mysql的jar包_将本地的jar包引入到maven项目中

首先进入到maven的目录下&#xff0c;并且将要引入的jar包也放在这个目录下然后执行命令mvn install:install-file -DfilecheckDataAdapter-api.jar -DgroupIdorg.cegn.des -DartifactIdcheckDataAdapter-api -Dversion2.0 -Dpackagingjar等到success成功后&#xff0c;在maven…

【渝粤教育】广东开放大学 网页设计与制作 形成性考核 (25)

选择题 题目&#xff1a; 当链接指向下列哪一种文件时&#xff0c;不打开该文件&#xff0c;而是提供给浏览器下载&#xff1f;( ) 答案&#xff1a;看左侧 题目&#xff1a; 若要获得名为login的表单中名为txtuser的文本输入框的值&#xff0c;以下获取方法中&#xff0c;正…

mysql导入创建表空间_oracle创建表空间 导入数据库

oracle2 然后是创建表空间创建表空间需要创建两个一个临时表空间 一个表空间--创建表空间create tablespace abc datafile ‘D:\tablespce\LANDHIGH_SFTMS.dbf‘ size 500m;--创建用户并指定表空间create user admin identified by admin default tablespace abc quota 500m …

【渝粤教育】广东开放大学 软件工程 形成性考核 (50)

选择题 题目&#xff1a; 关于协作图的描述&#xff0c;下列哪个不正确&#xff08;&#xff09; 题目&#xff1a;多对象是UML哪个视图中的概念&#xff08; &#xff09;。 题目&#xff1a;在UML中&#xff0c;接口有几种表达方式&#xff08;&#xff09;。 题目&#xff1…

java集合根据值排序_Java 8:对集合中的值进行排序

java集合根据值排序意识到Java 8将在接下来的几周内发布其GA版本之后&#xff0c;我认为现在是时候来看看它了&#xff0c;在过去的一周里&#xff0c;我一直在阅读Venkat Subramaniam的书 。 我要讲的是第3章&#xff0c;它涉及对人员集合进行排序。 Person类的定义大致如下&…

【渝粤教育】广东开放大学民事诉讼法 形成性考核 (23)

选择题 题目&#xff1a; 调解的双方当事人依照人民调解等法律&#xff0c;自调解协议生效之日起三十日内&#xff0c;可共同向&#xff08; &#xff09;申请司法确认。 答案&#xff1a;看左侧 题目&#xff1a; 根据我国民事诉讼法的规定&#xff0c;当事人可以书面协议选…

【渝粤题库】广东开放大学 建筑制图 形成性考核

选择题 题目&#xff1a;标注坡度可用&#xff08;&#xff09;&#xff0c;百分数&#xff0c;分数等三种形式。 题目&#xff1a;以下哪种工具不属于常用绘图工具()。 题目&#xff1a;H面上产生的投影叫作&#xff08;&#xff09;。 题目&#xff1a;下列关于投影叙述正确的…

Java线程的不同状态

介绍 在Java中&#xff0c;线程可以具有状态。 Thread.State枚举定义Java线程可以具有的不同状态。 该枚举定义了以下值– 新 可运行 已封锁 等候 TIMED_WAITING 已终止 在接下来的部分中&#xff0c;我将简要概述这些状态以及它们之间的可能过渡。 Java线程的状态 新 …

【渝粤题库】广东开放大学 电子商务职业技能 形成性考核

选择题 题目&#xff1a;有形商品在线销售有两种形式&#xff0c;下列有一类与其它不相同的销售形式为 答案&#xff1a; A、一号店 B、优衣库 C、京东商城 D、当当网 题目&#xff1a;&#xff08; &#xff09; 互认识或不认识的消费者联合起来&#xff0c;加大与商家谈…

【渝粤题库】广东开放大学民法 形成性考核

选择题 题目&#xff1a;根据《合同法》的规定&#xff0c;下列合同中哪些属于有名合同&#xff1f; 题目&#xff1a;所谓合同的争议是指哪些争议&#xff1f; 题目&#xff1a;下列合同中&#xff0c;属于诺成合同的是 题目&#xff1a;甲百货商店与乙电视机厂订立买卖合同&a…

java中的双与_java 双冒号是什么操作符?

双冒号::在JDK8的Lambda表达式函数中开始使用&#xff0c;用作方法引用。具体用法&#xff0c;咱们来举个例子&#xff1a;假设有个Person类&#xff1a;public class Person {public enum Sex {MALE, FEMALE}String name;LocalDate birthday;Sex gender;String emailAddress;p…

【渝粤题库】陕西师范大学164104 网络财务管理 作业(高起专)

《网络财务管理》作业 一、选择题 1.财务管理网络化( )了地域限制&#xff0c;提高了信息传输速度&#xff0c;增加了信息的使用价值&#xff0c;降低了企业成本&#xff0c;并促使传统的财务管理演化为网络财务管理。 A.打破 B.连通 C.更新 D.重组 2.拥有雄厚的&#xff08; &…

q7goodies事例_Java 8 Friday Goodies:Lambda和SQL

q7goodies事例在 Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢 jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经 写了一些关于Java 8好东西的博客 &#xff0c;现在我们觉得是时候开始一…

【渝粤题库】陕西师范大学180208 产品管理 作业(专升本)

《产品管理》作业 一、单选题 1、产品的内涵不断扩大&#xff0c;产品的外延也发展到产品五层次&#xff0c;最基本的层次是&#xff08; &#xff09;&#xff0c;即向消费者提供的产品基本效用和利益&#xff0c;也是消费者真正要购买的利益和服务。 A 期望产品 B 一般产品 C…

【渝粤题库】陕西师范大学200221 中国思想史 作业(高起专)

一、单选题 "性善论"是谁提出来的&#xff1f; A老子 B孟子 C孔子 D庄子 2 &#xff08;&#xff09;&#xff08;公元240~248年&#xff09;是魏齐王曹芳的年号。 A建元 B元光 C元平 D正始父义、母慈、兄友、弟恭、子孝五种美德合称&#xff1f; A五义B 五则C五典 …