To create a model for the table user
in your database, create the UserModel
class with the following syntax:
- extends
net.jkcode.jkmvc.orm.Orm
class - define companion object as meta data
- use
property()
to define delegate property
class UserModel(id:Int? = null): Orm(id) {
// companion object is meta data
companion object m: OrmMeta(UserModel::class /* model class */, "User Model" /* model label */, "user" /* table name */, "id" /* table primary key */){}
// delegate property
public var id:Int by property()
public var username:String by property()
public var password:String by property()
}
Meta data is the database information about this model, including database name, table name, primary key, etc.
Orm's meta data reprensents by class net.jkcode.jkmvc.orm.OrmMeta
, which has the follow properties:
- model class
- model label, default is model name
- table name, default is model name
- primary key, , default is
id
- database name, which is defined in
dataSources.yaml
, default isdefault
When you create a net.jkcode.jkmvc.orm.OrmMeta
object, you must pass these properties, just like:
OrmMeta(UserModel::class /* model class */, "User Model" /* model label */, "user" /* table name */, "id" /* table primary key */, "default" /* database name */){}
For each model, you must define meta data in companion object.
companion object m: OrmMeta(UserModel::class, "User Model", "user", "id"){}
Jkmvc provide net.jkcode.jkmvc.util.ModelGenerator
to generate model code
val generator = ModelGenerator("/home/shi/code/java/jkmvc/jkmvc-example/src/main/kotlin" /* code directory */, "net.jkcode.jkmvc.example.model" /* package */, "default" /* database name */, "shijianhang" /* author */)
generator.genenateModelFile("UserModel" /* model class name */, "用户模型" /* model label */, "user" /* table name */)
It will generate model code, according to the database and the table. And convert database column name to object's property name, according to configuration item columnUnderline
and columnUpperCase
in file dataSources.yaml
.
The code is following
class UserModel(id:Int? = null): Orm(id) {
// companion object is meta data
companion object m: OrmMeta(UserModel::class /* model class */, "User Model" /* model label */, "user" /* table name */, "id" /* table primary key */){}
// delegate property
public var id:Int by property()
public var username:String by property()
public var password:String by property()
}