そんな需要があるのかはさておきやってみたので。
環境
Java 10 でやってみたので、JAXB などをクラスパスに加えたりそういうのをしてたりする。
Java 8 だと不要な記述があるかも。
データベースは H2 データベース。
'jdbc:h2:mem:;INIT=runscript from \'src/main/resources/db/migration/V1__emp.sql\''
で、初期 DDL ( src/main/resources/db/migration/V1__emp.sql
) を流してテーブルをつくっている。
やり方
[build.gradle]
import groovy.xml.MarkupBuilder
import org.jooq.util.GenerationTool
import javax.xml.bind.JAXB
:
buildscript {
:
dependencies {
classpath "org.jooq:jooq-codegen:3.10.6"
classpath 'com.h2database:h2:1.4.177'
classpath 'org.glassfish.jaxb:jaxb-runtime:2.3.0'
classpath group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.0'
classpath group: 'javax.activation', name: 'activation', version: '1.1.1'
}
}
:
dependencies {
:
compile group: 'org.jooq', name: 'jooq', version: '3.10.6'
compile group: 'org.jooq', name: 'jooq-meta', version: '3.10.6'
compile group: 'org.jooq', name: 'jooq-codegen', version: '3.10.6'
compile group: 'org.jooq', name: 'jooq-scala_2.12', version: '3.10.6'
}
:
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
.configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.10.0.xsd') {
jdbc() {
driver('org.h2.Driver')
url('jdbc:h2:mem:;INIT=runscript from \'src/main/resources/db/migration/V1__emp.sql\'')
user('sa')
password('')
}
generator() {
name('org.jooq.util.ScalaGenerator')
database() {
name('org.jooq.util.h2.H2Database')
inputSchema('PUBLIC')
includes('.*')
excludes('')
}
generate([:]) {
immutablePojos true
validationAnnotations true
fluentSetters true
}
target() {
packageName('foo.bar.baz.springbootscala.dao')
directory('src/main/scala')
}
}
}
task generateJOOQ {
GenerationTool.generate(
JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
)
}
で、以下のコマンドを叩く。
$ ./gradlew generateJOOQ
src/main/scala
ディレクトリの jp.co.atware.springbootscala.dao
パッケージにコード生成される。
generator
- name
で org.jooq.util.ScalaGenerator
を指定しているので、Scala コードで生成される。