美文网首页
Grails框架之Domain与GORM

Grails框架之Domain与GORM

作者: 望月成三人 | 来源:发表于2019-01-14 13:19 被阅读7次

    Grails框架之Domain与GORM

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

    • Car和Engine之间是一对一的关系
    Class Car{
        Engine engine
    }
    Class Engine{
       Car car
    }
    
    • 但在实际情况中,我们会经常遇到实体间的从属关系,例如An Engine belongs to a Car,but a Car does not belong to an Engine Grails提供实现该关系的机制。
    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表中并无外键应用

    • 若想Engine中引用Car表的主键id作为其外键,可以将二者的关系定义为:
    Class Car{
        Engine engine
       static hasOne=[engine:Engine]
    }
    Class Engine{
        static belongsTo=[car:Car]
    }
    
    • Artist与Album之间为1对多关系;Album与Song之间也为一对多关系),在定义关系的同时同时可以定义约束
    //艺术家
    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"
    }
    

    查看原文

    相关文章

      网友评论

          本文标题:Grails框架之Domain与GORM

          本文链接:https://www.haomeiwen.com/subject/ndmddqtx.html