`
swordinhand
  • 浏览: 312946 次
  • 性别: 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
}

分享到:
评论

相关推荐

    Grails Grails Grails

    1. **模型(Model)**: 在Grails中,模型通常由Domain Classes表示,它们是持久化的实体,与数据库表对应。Domain Classes使用Groovy的元编程特性,如属性验证和动态方法,提供数据验证和业务逻辑。 2. **视图...

    grails中文入门简介

    此外,还可以配置自动数据库移植功能,它会在应用启动时根据域类(domain class)结构自动创建数据库表。 Grails的命令行工具非常强大,它支持创建Gant脚本来自动化重复的构建任务。用户可以创建可复用的Grails脚本...

    使用 Grails 快速开发 Web 应用程序

    创建Grails应用使用`grails create-app`命令,例如创建名为"Contact"的应用。Grails会自动生成包含默认目录结构的应用程序。目录结构包括`grails-app/conf`存储配置文件,`grails-app/controllers`存放控制器,`...

    使用Grails快速开发Web应用

    - **创建应用**:使用`grails create-app Contact`命令可快速生成名为“Contact”的应用框架,该命令自动生成了标准的项目目录结构,包括但不限于`grails-app`下的`conf`、`controller`、`domain`、`i18n`、`...

    the definitive guide to grails 2

    在Grails框架中,域模型(Domain Classes)是用于表示业务实体的对象,它们通常映射到数据库中的表。通过GORM(Grails Object Relational Mapping),Grails提供了自动的ORM支持,使得开发者无需编写复杂的SQL语句...

    Grails1.1中文文档

    3. **领域驱动设计(Domain-Driven Design, DDD)**:Grails的域类直接映射到数据库表,文档会解释如何定义领域类、关联关系,以及Lifecycle方法,如`beforeInsert`、`beforeUpdate`等。 4. **服务层**:Grails的...

    学习grails框架时候自己写的例子

    4. **数据库管理**:`contact_dev.sql`文件可能是数据库的初始脚本,用于创建表结构和填充测试数据。Grails支持多种数据库,如MySQL、PostgreSQL等,你可以通过配置`DataSource`来选择合适的数据库。 5. **Teamtest...

    Grails权威指南.pdf

    - **Domain Classes**:Grails中的领域类定义了数据库表结构,通过GORM自动创建表和字段。 - **Relationships**:支持一对一、一对多、多对多等关系映射,例如belongsTo、hasMany、hasOne等。 - **Criteria API**...

    第一个grails程序

    4. **grails-app/domain**:领域模型文件夹,定义了应用的数据模型和持久化逻辑,通常对应数据库中的表。 5. **grails-app/services**:服务层文件夹,存放业务逻辑代码,可被多个控制器复用。 6. **grails-app/...

    Grails案例

    - Domain Classes:在Grails中,我们使用Domain Classes来定义数据模型。这些类是Groovy类,包含了属性和方法,它们自动与数据库表关联。 - GORM注解:我们可以使用注解如`@Entity`、`@Table`等来自定义数据表的...

    grails 中文手册

    - `grails create-app` 创建新应用,`generate-controller` 生成控制器,`generate-domain-class` 生成领域模型。 5. **Grails Plugins** - Grails 插件系统是其核心特性之一,允许开发者重用和扩展功能。 - ...

    Grails-2.4.4-用户手册

    2. **创建新项目**:通过`grails create-app`命令创建项目,理解`grails-app`目录结构。 3. **编写Domain Class**:学习如何定义领域类,包括关系映射和验证规则。 4. **创建Controller**:了解如何创建控制器,处理...

    grails app

    在Grails中,模型类通常是Domain Class,它们直接映射到数据库表。如果我们的应用有数据存储需求,那么可能有一个或多个模型类定义在`src/groovy`目录下。 7. **配置(Configurations)** Grails应用的配置主要在`...

    111D:\keke\grails指南\笔记\1111111.txt,grails 初学者,使用说明的。

    创建领域类(Domain Class)即可实现数据持久化,例如,创建一个名为Book的领域类,定义其属性如title、author等,Grails会自动为其生成相应的数据库表和增删查改方法。 在提供的【部分内容】中,`println...

    grails增删改查(初学者必备)

    - Grails的GORM(Grails Object Relational Mapping)框架会自动创建与Domain类对应的数据库表。运行`grails dbm-gorm-diff`命令生成数据库更改脚本,然后用`grails dbm-update`或`dbm-changelog-sync`命令将这些...

    Grails技术精解与Web开发实践.pdf

    - 域类(Domain Classes)的定义和作用,它们是Grails用于映射数据库表和业务逻辑的类。 - 数据持久化技术,介绍如何使用Grails自带的GORM(Groovy Object Relational Mapping)技术进行数据库操作。 4. Grails的...

    grails 入门 大全

    - 使用 `grails create-app` 命令创建一个新的 Grails 应用程序。 - 自动生成的基本项目结构包括源代码目录、配置文件和测试文件。 4. **Grails 控制器(Controllers)** - 控制器处理用户请求,调用服务层方法...

    Grails入门教程(一)

    由于Eclipse对Grails的支持有限,建议通过命令行的方式来创建Grails项目: 1. **生成项目目录结构**:在工作空间目录下,如`E:\GRAILS_APPS`,执行`grails create-app Contact`命令。这将创建一个新的Grails项目,...

Global site tag (gtag.js) - Google Analytics