Extends/customizes the Slick schema code generator and wraps it in a parameterized plugin. See original source code here.
addSbtPlugin("xyz.driver" % "sbt-slick-codegen" % "0.10.2")
// Replace with the appropriate jdbc driver for your database:
libraryDependencies += "org.postgresql" % "postgresql" % "9.3-1104-jdbc41"
The jdbc-driver needs to be added separately to plugins.sbt
and build.sbt
as a dependency for the project and codegen, respectively.
Version 0.10.x requires sbt 1.0. For sbt 0.13, use 0.9.8
(also note that postgres jdbc driver 9.4.x
will not expose columns in certain metadata "tables", causing generated code not to compile)
Minimally, define codegenURI
, codegenPackage
, and codegenOutputPath
like so:
enablePlugins(CodegenPlugin)
codegenURI := "file:src/main/resources/conf/database.conf#database"
codegenPackage := "xyz.driver.schemas"
codegenOutputPath := (baseDirectory.value / "src" / "main" / "scala").getPath
Use settings -V codegen
to view documentation for all available codegen settings.
Code should be committed locally (rather than being placed in a sourceMangaged directory and being generated as part of build), so that it can be read, reviewed, and debugged. This requires having a locally accessible database running from which to generate code. Configure such a dabase like so:
-
Install docker.
-
Start a vanilla docker instance
docker run -it -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_DB=postgres -e POSTGRES_PASSWORD=postgres postgres
add 127.0.0.1 postgres postgres
to /etc/hosts
to make it accessible locally as "postgres".
- Configure database in typesafe config
If sqitch is already configured, modify step 1 to make docker instance look like the appropriate database in application.conf
. For the above docker postgres instance, the following configuration will work:
database {
driver = "slick.driver.PostgresDriver$"
db {
url = "jdbc:postgresql://postgres:5432/postgres"
driver = org.postgresql.Driver
user = "postgres"
password = "postgres"
# other options as appropriate
}
}
In build.sbt
make sure codegenURI := "typesafeConfig#database"
where typesafeConfig
is the url of the typesafe config and database
is the name of the database configuration in that file to use.
- Run codegen with
sbt genTables
Rememeber to run migrations first! If you just added a new schema/table in a migration, be sure to update codegenSchemaWhitelist
. Other than automated code formatting, the output source shouldn't be modified, since genTables
should be run every time the schema is updated and will overwrite any manual changes.