詳しいことはここを見てください。
主にMySQLを使用しているため、DBの用語等はMySQLのものとなります。
よく使われるフィールド
object DefaultFieldModel extends DefaultFieldModel with LongKeyedMetaMapper[DefaultFieldModel]
class DefaultFieldModel extends LongKeyedMapper[DefaultFieldModel]{
  def getSingleton = DefaultFieldModel 
  object idField extends MappedLongIndex(this) 
  object intField extends MappedInt(this)
  object longField extends MappedLong(this)
  object varcharField extends MappedString(this,100)// VARCHAR(100)
  object textField extends MappedText(this) // TEXT
  object dateField extends MappedDate(this) // DATE
  object dateTimeField extends MappedDateTime(this) // DATETIME
}
//usage
val newObject = DefaultFieldModel.createInstance
newObject.idField(1)
newObject.textField("hoge")
...
newObject.save()
val read = DefaultFieldModel.findByKey(1L).open_!
println("ID:" + read.idField.is)
AUTO INCREMENTなIDの設定 + CRUD画面の簡単生成
object AutoIncrement extends AutoIncrement with LongKeyedMetaMapper[AutoIncrement] with CRUDify[Long,AutoIncrement]{
  /*
  def menus : List[Menu]
  がCRUDifyにより追加されます
  これをSiteMenuMapに追加しておくことでCRUD画面が作成されます。
  */
}
class AutoIncrement extends LongKeyedMapper[AutoIncrement] widh IdPK{
  def getSingleton = AutoIncrement
  /**
   IdPKにて
   object id extends MappedLongIndex(this)
   のフィールドが作成されます。
  */
}
インデックス、複合インデックスの設定のやりかた
object IndexSample extends IndexSample with LongKeyedMetaMapper[IndexSample]{
  //複合インデックス設定
  override def dbIndexes = {
    List(
      new Index(unionIndex1 , unionIndex2 , unionIndex3),
      new Index(unionIndex3 , unionIndex2)
    )
  }
}
class IndexSample extends LongKeyedMapper[IndexSample] widh IdPK{
  def getSingleton = AutoIncrement
  //フィールドのインデックス設定
  object indexForSingleField extends MappedInt(this){
    override def dbIndexed_? = true
  }
  object unionIndex1 extends MappedInt(this)
  object unionIndex2 extends MappedInt(this)
  object unionIndex3 extends MappedInt(this)
}
OneToOne , OneToMany
object MailBox ...
class MailBox extends LongKeyedMapper[MailBox] with IdPK with OneToMany[Long, MailBox]{
  
  def getSingleton = MailBox
  //one to many
  object mails extends MappedOneToMany(Mail , Mail.mailBox, OrderBy(Mail.id, Ascending))
  
}
object Mail ...
class Mail extends LongKeyedMapper[MailBox] with IdPK{
  
  def getSingleton = Mail
  //one to one(many to one)
  object mailBox extends MappedLongForeignKey(this,MailBox)
}
ManyToMany
object User ...
class User extends LongKeyedMapper[User] with IdPK with ManyToMany{
  def getSingleton = User
  
  //many to many
  object mails extends MappedManyToMany(Mail , Mail.mailBox, OrderBy(Mail.id, Ascending))
  
}
object Role...
class Role extends LongKeyedMapper[Role] with IdPK{
  def getSingleton = Role 
}
object UesrHasRole ...
class UesrHasRole extends Mapper[UserHasRole]{
  
  def getSingleton = UserHasRole
  
  object user extends LongMappedMapper(this,User)
  object role extends LongMappedMapper(this,Role)
}
 
0 件のコメント:
コメントを投稿