The source code generator for Scala ORMs.
The current version of Scalagen support ScalaQuery and Anorm. It's possible to generate Table objects and case classes for ScalaQuery by the following code.
import jp.sf.amateras.scalagen._
Scalagen.generate(Settings(
generator = new ScalaQueryGenerator(),
driver = "org.hsqldb.jdbcDriver",
url = "jdbc:hsqldb:hsql://localhost/",
username = "sa",
password = "",
catalog = null,
schemaPattern = null,
tablePattern = null))
Source files would be generated into /src/main/scala/models
.
Scalagen is still under development. So it has never been published to the public repository. You can get source code and build it from this git repository.
You can configure Scalagen via jp.sf.amateras.scalagen.Settings
.
property | type | description |
---|---|---|
generator | Generator | generator instance (required) |
driver | String | JDBC driver classname (required) |
url | String | JDBC connection url (required) |
username | String | JDBC connection username (required) |
password | String | JDBC connection password (required) |
catalog | String | catalog (default is "%") |
schemaPattern | String | schema pattern (default is "%") |
tablePattern | String | table pattern (default is "%") |
includeTablePattern | String | regular expression which matches included tables (default is "") |
excludeTablePattern | String | regular expression which matches excluded tables (default is "") |
packageName | String | package name of generated source (default is "models") |
targetDir | File | output directory of generated source (default is new File("src/main/scala")) |
charset | String | chaarset of generated source (default is "UTF-8") |
typeMappings | Map[Int, String] | mappings of SQL type to Scala type (default is DataTypes.defaultMappings) |
Scalagen supports following ORMs. Specify a generator which corresponds to your ORM at Settings#generator
.
framework | artifact | generator classname |
---|---|---|
ScalaQuery | scalagen-scalaquery | jp.sf.amateras.scalagen.ScalaQueryGenerator |
Anorm | scalagen-anorm | jp.sf.amateras.scalagen.AnormGenerator |
Squeryl | TBD | TBD |
mirage-scala | TBD | TBD |
Scalagen also provides ScalateGenerator
to generate source code by Scalate template which is written by users.
You can generate source code using your own Scalate template without Generator implementing by using this class as Generator.
This is a configuration example of ScalateGenerator
:
import jp.sf.amateras.scalagen._
Scalagen.generate(Settings(
generator = new ScalateGenerator(new java.io.File("template/my.ssp")),
...
)
Following variables are available in the specified Scalate template file:
variable name | type |
---|---|
table | jp.sf.amateras.scalagen.Table |
settings | jp.sf.amateras.scalagen.Settings |
Scalagen could be used as sbt-plugin. In project/plugin.sbt
, add:
resolvers += ("amateras repository" at "http://amateras.sourceforge.jp/mvn/")
addSbtPlugin("jp.sf.amateras.scalagen" % "scalagen-sbtplugin" % "0.2")
libraryDependencies ++= Seq(
// for ScalaQuery
"jp.sf.amateras.scalagen" %% "scalagen-scalaquery" % "0.2",
// for Anorm
//"jp.sf.amateras.scalagen" %% "scalagen-anorm" % "0.2",
// JDBC driver for your database
"org.hsqldb" % "hsqldb" % "2.2.8"
)
In build.sbt
, add following configurations:
seq(jp.sf.amateras.scalagen.ScalagenPlugin.scalagenSettings: _*)
scalagenConfiguration := jp.sf.amateras.scalagen.Settings(
// for ScalaQuery
generator = new jp.sf.amateras.scalagen.ScalaQueryGenerator(),
// for Anorm
//generator = new jp.sf.amateras.scalagen.ScalaQueryGenerator(),
driver = "org.hsqldb.jdbcDriver",
url = "jdbc:hsqldb:hsql://localhost/",
username = "sa",
password = "",
catalog = null,
schemaPattern = null,
tablePattern = null
)
Execute sbt scalagen
. Source files for ScalaQuery are generated into src/main/scala/models
.
You can write your own Generator implementations based on jp.sf.amateras.scalagen.GeneratorBase
.
Scalagen provides some base classes to help implementing Generator.
GeneratorBase
is a most basic base class for Generators. Implements generate(settings: Settings, table: Table): String
method
which returns the source code for the given table.
See ScalaQueryGenerator
as an example of Generator implementation which is based on GeneratorBase
.
ScalateGeneratorBase
is a base class for Generators which generate source code by Scalate template.
See AnormGeenrator and
its template
as an example of Generator implementation which is base on ScalateGenerator
.