javascript
jooq代码生成_将jOOQ与Spring结合使用:代码生成
jooq代碼生成
我們可能在本教程的第一部分中還記得jOOQ指出
jOOQ從您的數(shù)據(jù)庫(kù)生成Java代碼,并允許您通過(guò)其流暢的API構(gòu)建類型安全SQL查詢。
本教程的第一部分描述了如何配置使用jOOQ的Spring驅(qū)動(dòng)的應(yīng)用程序的應(yīng)用程序上下文,但沒(méi)有描述如何使用jOOQ創(chuàng)建類型安全SQL查詢。
這篇博客文章使我們更接近解決方案。 如果要使用jOOQ構(gòu)建類型安全的數(shù)據(jù)庫(kù)查詢,則必須對(duì)數(shù)據(jù)庫(kù)進(jìn)行反向工程,并創(chuàng)建代表不同數(shù)據(jù)庫(kù)表,記錄等的類。 這些類是類型安全SQL查詢的構(gòu)建塊。
幸運(yùn)的是,jOOQ提供了一種自動(dòng)執(zhí)行此過(guò)程的簡(jiǎn)便方法 。 這篇博客文章描述了如何使用Maven生成所需的類。
讓我們開(kāi)始吧。
補(bǔ)充閱讀:
- 使用Maven創(chuàng)建配置文件特定的配置文件說(shuō)明了如何使用Maven構(gòu)建配置文件為不同的環(huán)境創(chuàng)建不同的配置。 通過(guò)使用此博客文章中描述的方法來(lái)配置此博客文章的示例應(yīng)用程序。
- 將jOOQ與Spring結(jié)合使用:配置是本教程的第一部分,它描述了您可以配置使用jOOQ的Spring應(yīng)用程序的應(yīng)用程序上下文。 您無(wú)需閱讀本教程的第一部分就可以理解該博客文章,但是,如果您想在Spring支持的應(yīng)用程序中真正使用jOOQ,建議您也閱讀該博客文章。
用Maven生成代碼
我們的構(gòu)建過(guò)程分為三個(gè)重要階段,如下所述:
讓我們繼續(xù)前進(jìn),找出如何在pom.xml文件中配置這些階段。
從配置文件特定的屬性文件中讀取屬性
我們可以使用Properties Maven插件從特定于配置文件的屬性文件中讀取屬性。 該插件讀取屬性文件的內(nèi)容,并確保我們可以在pom.xml文件中使用其屬性。
我們可以按照以下步驟配置此插件:
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>讓我們繼續(xù)前進(jìn),了解如何更新應(yīng)用程序的數(shù)據(jù)庫(kù)架構(gòu)。
更新數(shù)據(jù)庫(kù)架構(gòu)
在我們可以從數(shù)據(jù)庫(kù)生成任何代碼之前,我們必須確保數(shù)據(jù)庫(kù)的架構(gòu)是最新的。 最簡(jiǎn)單的方法是使用SQL Maven插件 ,該插件可以執(zhí)行從SQL文件中找到SQL語(yǔ)句。
在現(xiàn)實(shí)生活中的應(yīng)用程序,你可能想使用兩種遷飛或Liquibase用于這一目的。
讓我們找出如何確保示例數(shù)據(jù)庫(kù)始終是最新的。
首先 ,我們必須創(chuàng)建一個(gè)SQL文件,該文件將創(chuàng)建數(shù)據(jù)庫(kù)模式。 如果從數(shù)據(jù)庫(kù)中找不到該SQL腳本,它將創(chuàng)建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部分中添加一個(gè)skip.db.creation屬性。 此屬性用于啟用和禁用架構(gòu)更新。 因?yàn)槲覀円谒信渲梦募袉⒂脭?shù)據(jù)庫(kù)模式更新,所以我們必須將此屬性的值設(shè)置為false 。
我們的POM文件的相關(guān)部分如下所示:
<properties><skip.db.creation>false</skip.db.creation> </properties>第三 ,我們必須配置SQL Maven插件。 我們可以按照以下步驟進(jìn)行操作:
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>讓我們繼續(xù)前進(jìn),了解如何配置jOOQ-codegen Maven插件。
從數(shù)據(jù)庫(kù)生成代碼
我們的最后一個(gè)任務(wù)是配置jOOQ-codegen Maven插件。 讓我們找出這是如何完成的。
首先 ,我們必須在pom.xml文件的properties部分中添加一個(gè)jooq.generator.db.dialect屬性。 此屬性指定正確的數(shù)據(jù)庫(kù)方言,并且用于配置jOOQ-codegen Maven插件。 因?yàn)槭纠龖?yīng)用程序使用H2數(shù)據(jù)庫(kù),所以我們必須將此屬性的值設(shè)置為org.jooq.util.h2.H2Database 。
將數(shù)據(jù)庫(kù)方言指定為屬性的原因是,這使我們可以在不同的環(huán)境中使用不同的數(shù)據(jù)庫(kù)。
我們的POM文件的相關(guān)部分如下所示:
<properties><jooq.generator.db.dialect>org.jooq.util.h2.H2Database</jooq.generator.db.dialect> </properties>其次 ,我們必須配置jOOQ-codegen Maven插件。 我們可以按照以下步驟進(jìn)行操作:
- 目標(biāo)軟件包指定該軟件包,它是所創(chuàng)建類的根軟件包。
- 目標(biāo)目錄指定生成類的目錄。
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參考手冊(cè)中獲取有關(guān)代碼生成的更多信息:
- 第6章:代碼生成
- 第6.2節(jié):高級(jí)生成器配置
- 第6.3節(jié):自定義生成器策略
- 第6.7節(jié):生成的表
- 第6.8節(jié):生成的記錄
讓我們找出運(yùn)行代碼生成時(shí)發(fā)生的情況。
產(chǎn)生了什么?
調(diào)用jOOQ-codegen Maven插件的生成目標(biāo)時(shí),它將分析數(shù)據(jù)庫(kù)的架構(gòu)并生成已配置目標(biāo)目錄和包的類。 在我們的情況下,這意味著:
- 代碼將生成到目錄target / generation-sources / jooq 。
- 生成的類的根包是net.petrikainulainen.spring.jooq.todo.db 。
我們?cè)诖瞬┛臀恼轮袆?chuàng)建的配置可確保創(chuàng)建以下類:
- 生成到net.petrikainulainen.spring.jooq.todo.db包的類包含數(shù)據(jù)庫(kù)的元數(shù)據(jù)。 jOOQ將這些類稱為“全局”工件 。
- net.petrikainulainen.spring.jooq.todo.db.tables.Todos類是一個(gè)表類 ,它描述單個(gè)數(shù)據(jù)庫(kù)表的結(jié)構(gòu)。 我們可以使用此類針對(duì)存儲(chǔ)在todos數(shù)據(jù)庫(kù)表中的數(shù)據(jù)編寫數(shù)據(jù)庫(kù)查詢。
- net.petrikainulainen.spring.jooq.todo.db.tables.recods.TodoRecord類是一個(gè)記錄類 ,其中包含單個(gè)表行的信息。 從todos數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)的數(shù)據(jù)庫(kù)查詢返回TodoRecord對(duì)象(如果我們選擇這樣做)。
摘要
現(xiàn)在,我們已經(jīng)成功配置了jOOQ-codegen Maven插件,以從數(shù)據(jù)庫(kù)中生成代碼。 本教程教了我們兩件事:
- 我們了解了如何配置jOOQ-codegen Maven插件以從數(shù)據(jù)庫(kù)生成代碼。
- 我們了解了開(kāi)始生成代碼時(shí)將創(chuàng)建什么樣的類。
本教程的下一部分描述如何使用jOOQ生成的類將CRUD函數(shù)添加到簡(jiǎn)單的Web應(yīng)用程序。
- Github上提供了此博客文章的示例應(yīng)用程序。
參考:在Petri Kainulainen博客上,我們的JCG合作伙伴 Petri Kainulainen 使用jOOQ和Spring:代碼生成 。
翻譯自: https://www.javacodegeeks.com/2014/02/using-jooq-with-spring-code-generation.html
jooq代碼生成
總結(jié)
以上是生活随笔為你收集整理的jooq代码生成_将jOOQ与Spring结合使用:代码生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用Oracle验证外部数据
- 下一篇: 创建一个安全的Spring REST A