`
swordinhand
  • 浏览: 308443 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

根据表结构来创建Grails的Domain

 
阅读更多
首先是一对一的关系,假设有两张表,Face和Nose
Face表
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| version | bigint(20)   | NO   |     | NULL    |                |
| name    | varchar(255) | NO   |     | NULL    |                |
| nose_id | bigint(20)   | NO   | MUL | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
Nose表
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| version | bigint(20)   | NO   |     | NULL    |                |
| name    | varchar(255) | NO   |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+

最简单的定义方式就是
class Face {
    String name
    Nose nose
}

class Nose {
    String name
}

为了从Nose反向找face方便,也可以加一个双向的引用,把Nose的定义修改一下
class Nose {
    String name
    static belongsTo = [face:Face]
}


如果想让face表里面不出现nose_id,而是在nose表中增加一个face_id作为外键,可以这样定义
class Face {
    String name    
}

class Nose {
    String name
    static belongsTo = [face:Face]
}

同样,为了双向引用,可以把Face类的定义修改为
class Face {
    String name
    static hasOne = [nose : Nose]
}


接下来是一对N的关系,假设有两张表,Book和Author,简化为每本书只有一个作者,每个作者可以有很多本书
Author表
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| version    | bigint(20)   | NO   |     | NULL    |                |
| name       | varchar(255) | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

Book表
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| version   | bigint(20)   | NO   |     | NULL    |                |
| author_id | bigint(20)   | NO   | MUL | NULL    |                |
| name      | varchar(255) | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

对应的Domain类定义为
class Author {
    String name
    static hasMany = [book: Book]    
}

class Book {
    String name;    
    static belongsTo = [author : Author]
}


最后是N对N的关系,还是用Author和Book表,每本书可以有多个作者,每个作者也有多本著作
这时候需要一张中间表来保存映射关系
author_book
+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| book_id   | bigint(20) | NO   | PRI | NULL    |       |
| author_id | bigint(20) | NO   | PRI | NULL    |       |
+-----------+------------+------+-----+---------+-------+
同时Book表中也不再有author_id的外键

Author类不变,把Book的定义改成下面这样就可以了
class Book {
    String name;
    static hasMany = [author:Author]
    static belongsTo = Author
}

分享到:
评论

相关推荐

    Eclipse下搭建Grails项目

    Grails项目的应用越来越多,而对于初学者来说,在Eclipse下搭建Grails项目是一个难题,这个文档将教会你如何搭建Grails项目,希望对你有所帮助。

    Grails Grails Grails

    Grails Grails Grails Grails Grails

    在Eclipse里使用Grails类创建工具.pdf

    我们知道,在 Grails 项目中使用Grails类创建工具如“grails create-domain-class”等,能 帮我们创建domain、service 和controller等类及它们的测试类及其他。因此,我们在Grails 项目 中常常是使用这些工具帮我们...

    Grails权威指南 Grails权威指南

    Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南

    Groovy轻松入门——Grails实战基础篇

    在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章 向您展现Grails的迷人风采,使您感受到Grails的魅力,以至... 二,创建Grails Demo程序

    Grails权威指南

     3.1 grails工程结构  3.2 grails和mvc模式  3.2.1 mvc中的模型(m)  3.2.2 mvc中的视图(v)  3.2.3 mvc中的控制器(c)  3.2.4 除mvc之外的其他部分  3.3 grails支持多种环境  3.4...

    Grails1.1中文文档

    Grails是个一栈式开发框架,它尝试通过核心技术和插件技术来解决许多Web开发难题。Grails包含了如下内容: 由 Hibernate 构成的易于使用的 Object Relational Mapping (ORM)层 称为 Groovy Server Pages (GSP) 的...

    Grails 教程

    如今的Java Web开发对于需求来说已经变得过于复杂。当今众多Java领域的Web开发框架不仅使用复杂,而且并没有很好的遵循Don’t Repeat Yourself(DRY)原则...这篇文档会向你介绍如何使用Grails框架来搭建Web应用程序。

    grails 1.0.4

    Grails尽量为更多现有的Java项目创建一个全面的框架(不仅局限于视图处理),这和当前一些Java框架提供给用户的一种AnemicAPI形成了明显的对比。Grails的出现并不是偶然的,而是随着Web应用的日趋复杂及Web2.0和Ajax...

    grails

    grails-2.1.zip.001

    Grails入门指南 -- 针对grails1.0.4更新

    Grails入门指南中文pdf -- 针对grails1.0.4更新,附加idea8 开发grails的流程

    grails+Xfire webservice

    grails+Xfire webservice

    Grails_开发简介

    Grails_开发简介,本文介绍如何使用Oracle JDeveloper 作为IDE 来开发Grails 应用程序。此外,您还在学习开发Grails 应用程序的过程中大概了解Groovy 的一些概念。

    grails login

    grails 用户登录的例子,必须登录后才可以查看信息,并且只有admin用户才可以创建用户,此例子,只要将grails 的环境配好,就可以用了,用的是自带的数据库,如果需要mysql 可以更改。

    Grails中文参考手册

    Grails 中文 参考手册

    grails3.2.8-01

    grails3.2.8 part1

    grails开发环境配置及应用开发

    详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发

    grails入门经典

    grails grails入门经典 grails入门 grails例子 grails资料 通过自学一点点积累起来的,相信对你有帮助的。

    grails-2.3.6.zip

    grails-2.3.6

Global site tag (gtag.js) - Google Analytics