SQL Server 2017 - 使用 Gradle 生成 JOOQ 代码
Posted
技术标签:
【中文标题】SQL Server 2017 - 使用 Gradle 生成 JOOQ 代码【英文标题】:SQL Server 2017 - JOOQ code generation with Gradle 【发布时间】:2019-06-22 00:09:10 【问题描述】:我来自 mysql 世界,使用 JOOQ 生成代码一直是一件容易的事。输出很适合我的目标包名称。现在我有这个项目,我需要使用 SQL Server 2017 作为主数据库。我购买了一个 JOOQ 许可证并设法设置 Gradle 来使用它。 Flyway 就像一个魅力,但由于某种原因,我被困在 JOOQ 代码生成过程中。
我知道在 MySQL 中模式和表几乎是一回事,但在 SQL Server 中却不同。我所有的表都使用 DBO 作为其默认架构,并且位于数据库中我的 Tables 目录的根目录中。
现在的问题。当我运行 generateJooqSchemaSource JOOQ 将开始为数据库中的所有表生成代码,包括 [master] 和 [msdb],即使我在连接 URL 中指定了我的数据库名称。代码生成过程应该只针对我指定的数据库。
知道如何解决这个问题吗?
这是我的 gradle 构建文件:
buildscript
repositories
mavenLocal()
jcenter()
dependencies
classpath 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'
plugins
id 'java'
id 'eclipse'
id 'idea'
id 'org.springframework.boot' version '2.1.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.6.RELEASE'
id 'nu.studer.jooq' version '3.0.2'
id 'org.flywaydb.flyway' version '5.1.4'
group 'org.test.security'
version '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories
mavenLocal()
jcenter()
dependencyManagement
imports
mavenBom 'org.springframework.boot:spring-boot-starter-parent:2.1.2.RELEASE'
configurations
developmentOnly
runtimeClasspath
extendsFrom developmentOnly
dependencies
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.flywaydb:flyway-core:5.2.4'
implementation 'org.apache.poi:poi:4.0.1'
implementation 'org.apache.poi:poi-ooxml:4.0.1'
implementation 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'
implementation 'org.firebirdsql.jdbc:jaybird-jdk17:3.0.5'
implementation 'org.jooq.pro:jooq:3.11.9'
implementation 'org.jooq.pro:jooq-meta:3.11.9'
implementation 'org.jooq.pro:jooq-codegen:3.11.9'
compileOnly 'org.springframework.boot:spring-boot-configuration-processor'
jooqRuntime 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'
jooqRuntime 'org.firebirdsql.jdbc:jaybird-jdk17:3.0.5'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
jooq
version = '3.11.9'
edition = 'PRO'
master(sourceSets.main)
jdbc
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase"
user = "sa"
password = "admin123"
generator
database
name = "org.jooq.meta.sqlserver.SQLServerDatabase"
inputSchema = "dbo"
generate
relations = true
deprecated = false
records = true
immutablePojos = true
fluentSetters = true
target
packageName = 'org.test.security.database.master'
directory = 'target/generated-src'
flyway
url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase"
user = "sa"
password = "admin123"
table = "Schema_History"
【问题讨论】:
【参考方案1】:默认情况下,jOOQ 将为所有目录(数据库)和所有模式生成代码。如果您想将代码生成限制为仅一个数据库,则需要指定 inputCatalog,可能还需要指定 inputSchema。一些细节可以找到on this page
换句话说,写
database
name = "org.jooq.meta.sqlserver.SQLServerDatabase"
inputCatalog = "my_database_here"
inputSchema = "dbo"
【讨论】:
谢谢!现在更有意义了。以上是关于SQL Server 2017 - 使用 Gradle 生成 JOOQ 代码的主要内容,如果未能解决你的问题,请参考以下文章
翻译:Python和SQL Server 2017的强大功能