Help us understand the problem. What is going on with this article?

GradleでJOOQを使ってみた

More than 1 year has passed since last update.

GradleでJOOQを使ってみた

注意:この記事は IntelliJ Community (無料版) の Tomcat (JavaEE) 内で JOOQ を利用した時の備忘録です。
IntelliJでGradleを利用したtomcatの環境構築は、以下のリンクで解説しています。
IntelliJ Community で Tomcat の実行環境を整備する
iciqlでON DUPLICATE KEY UPDATEが利用できないっぽかった(コード生成も失敗した)ので移行しました。

また、環境はWindows10を想定しています。

外部ライブラリにjooqを追加

build.gradle の dependencies に以下を追記します。

dependencies {
    //データベースのコネクターを追加
    //(mysqlの場合は6以上のバージョンを指定するとTimeZone関連のエラーが出る)
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.47'

    //jooq関連のjarを追加
    compile group: 'org.jooq', name: 'jooq', version: '3.11.2'
    compile group: 'org.jooq', name: 'jooq-parent', version: '3.11.2'/*, ext: 'pom'*/
    compile group: 'org.jooq', name: 'jooq-meta', version: '3.11.2'
    compile group: 'org.jooq', name: 'jooq-meta-extensions', version: '3.11.2'
    compile group: 'org.jooq', name: 'jooq-codegen', version: '3.11.2'
    compile group: 'org.jooq', name: 'jooq-codegen-maven', version: '3.11.2'
}

データベースのコネクタも一緒に追加する必要があるのですが、MySQLをお使いの場合、 version を6.0 以上を指定すると実行時に以下の様なエラーが出ます。

The server time zone value '???? (?W????)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specific time zone value if you want to utilize time zone support.

JOOQでコードを生成するのに便利なプラグインを入れる

JOOQ プラグインを導入するために、 build.gradle の plugins を追記します。

plugins {
    id 'nu.studer.jooq' version '3.0.2'
}

JOOQプラグインの設定をする

JOOQプラグインの設定は、build.gradle 内にjooq{} を宣言し、その内部に書き込むことでできます。

dependencies {
    jooqRuntime group: 'mysql', name: 'mysql-connector-java', version: '5.1.47'
}

jooq {
    //jooqのバージョンを指定
    version = '3.11.2'
    edition = 'OSS'
    tables(sourceSets.main) {
        jdbc {
            //データベースドライバの完全修飾クラス名
            driver = 'com.mysql.jdbc.Driver'
            //SQLに接続するためのURL
            url = 'jdbc:mysql://localhost:3306/Hoge?serverTimezone=JST'
            //データベースにログインするためのユーザ名
            user = 'user'
            //データベースにログインするためのパスワード
            password = 'password'
        }
        generator {
            name = 'org.jooq.codegen.DefaultGenerator'
            database {
                //対象とするデータベースを表すクラス名(後述)
                name = 'org.jooq.meta.mysql.MySQLDatabase'
                inputSchema = ''
                includes = '.*'
                excludes = ''
            }
            target {
                //生成されるコードのパッケージ名
                packageName = 'jooq'
                //生成されるコードを配置するディレクトリ
                directory = 'src/main/java'
            }
        }
    }
}

データベースでMySQL以外を利用したい場合は、以下の表の通りにnameを指定してください。
データベース接続に使うjooqのクラス名です。

データベース name
ase org.jooq.util.ase.ASEDatabase
cubrid org.jooq.util.cubrid.CUBRIDDatabase
db2 org.jooq.util.db2.DB2Database
derby org.jooq.util.derby.DerbyDatabase
h2 org.jooq.util.h2.H2Database
hsqldb org.jooq.util.hsqldb.HSQLDBDatabase
ingres org.jooq.util.ingres.IngresDatabase
mysql org.jooq.util.mysql.MySQLDatabase
oracle org.jooq.util.oracle.OracleDatabase
postgres org.jooq.util.postgres.PostgresDatabase
sqlite org.jooq.util.sqlite.SQLiteDatabase
sqlserver org.jooq.util.sqlserver.SQLServerDatabase
sybe org.jooq.util.sybase.SybaseDatabase

jooq Code generation | Java開発

JOOQのコード生成

Gradleウィンドウにjooq → generateTablesJooqSchemaSource というTaskがあるので、それを実行することでデータベースからそれに対応したクラスを自動生成することが出来ます。

JOOQでLet's Programming!

jOOQ使用方法のまとめ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away