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があるので、それを実行することでデータベースからそれに対応したクラスを自動生成することが出来ます。