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 代码的主要内容,如果未能解决你的问题,请参考以下文章

sql server2017功能该怎么选

翻译:Python和SQL Server 2017的强大功能

Python和SQL Server 2017的强大功能

Python和SQL Server 2017的强大功能

SQL Server 2017 - 使用 Gradle 生成 JOOQ 代码

外文转译:Python和SQL Server 2017的强大功能