Slick 3.1.1 tem algumas ferramentas bastante boas para gerar seu código ddl e esquema a partir de um banco de dados já existente. Uma coisa que é um pouco complicada é quando você tem alguns tipos de campo muito específicos de banco de dados em seu banco de dados ou deseja que o slick trabalhe sobre as visualizações.
Para fazer isso, você deve confiar em MTables
(m para meta), para obter tabelas e visualizações imediatamente.
import slick.codegen.SourceCodeGenerator
import slick.driver.PostgresDriver
import slick.driver.PostgresDriver.api._
import scala.concurrent.Await
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import slick.jdbc.meta._
object CreateModel extends App {
override def main(args: Array[String]) {
// fetch data model
String dbConfig = "your_db_config" //in application.conf
val db = Database.forConfig(dbConfig)
val tablesAndViews = MTable.getTables(None, None, None, Some(Seq("TABLE", "VIEW"))) //TABLE, and VIEW represent metadata, i.e. get database objects which are tables and views
val modelAction = PostgresDriver.createModel(Some(tablesAndViews))
val modelFuture = db.run(modelAction) //slick has drivers and extensions for a number of dbs including mysql, MSSQL, H2 and Oracle
// customize code generator
val codegenFuture = modelFuture.map(model => new SourceCodeGenerator(model))
val path = getClass.getResource("").getPath
Await.ready(
codegenFuture.map(_.writeToFile("slick.driver.PostgresDriver", path, "dal", "Tables", "Tables.scala")), 20 seconds)
}
}
Como está, ele é executado como um programa autônomo, existe a possibilidade de integração sbt para rodar em compilação, por exemplo, que requer um pouco mais de refinamento. Veja a documentação (link acima) para mais.