Grails框架之Domain与GORM

2019-01-14  本文已影响7人  望月成三人

Grails框架之Domain与GORM

domain实体类在任何的应用场景中都处于核心位置,它是数据的封装抽象形式
假设现需构建一个在线歌曲商城应用,用户可以购买歌曲,评论歌曲,预览歌曲等,为简化描述问题先不考虑系统的实现方式,按需求分析该应用至少比包括Artist(艺术家)、Album(专辑)、Song(歌曲)3个实体,每个实体具有其特有的属性,约定每位Artist(艺术家)将拥有多张Album(专辑),而每张专辑收录多首Song(歌曲)。

Class Car{
    Engine engine
}
Class Engine{
   Car car
}
Class car{
    Engine engine
}

Class Engine{
    static  belongsTo=[car:Car]
}//An Engine belongs to a Car

Engine类中belongsTo属性值是一个Map,键值key是car(Car类的引用),belongsTo表明Car实体是关系的拥有者,此时数据库中Car表中引用Engine主键id作为其外键,但Engine表中并无外键应用

Class Car{
    Engine engine
   static hasOne=[engine:Engine]
}
Class Engine{
    static belongsTo=[car:Car]
}
//艺术家
class Artist {
    String name
    static constraints = {
       name(nullable: false,unique: true)//定义非空唯一约束
    }
    static mapping = {
        version(false) //消除version默认属性
        id:'identity' //主键自增
    }
    static hasMany = [albums:Album] //与Album建立一对多关系
}
//专辑
class Album {
    String title
    static constraints = {
    }
    static mapping = {
        version(false)
        id:'identity'
    }
    static hasMany = [songs:Song] //与Song建立一对多关系
    static  belongsTo = [artist:Artist]  //Album表外键引用Artist表的主键
}
//歌曲
class Song {
    String title
    Integer duration //歌曲时长

    static constraints = {
        title (blank: false,unique: true)
    }
    static mapping = {
        version(false)
        id:'identity'
        duration(min:1)
    }
    static  belongsTo = [album:Album] //Song表中外键应用Album表主键
}
static mapping = {
sort "startDate"
}

查看原文

上一篇下一篇

猜你喜欢

热点阅读