`
Javabengou
  • 浏览: 174781 次
  • 性别: Icon_minigender_1
  • 来自: 郴州
社区版块
存档分类
最新评论

Grails(Java笨狗)系列---The Application Domain

阅读更多

任何面向对象语言,不管是桌面,Server,Mobile 应用程序,Domain在程序中都是重要的。

Domain是任何企业应用的核心,比如在书店应用中需要Book,在购物应用中需要Order,这些企业实体相互关联着,他们的状态可以被保存,或者在以后的某个时刻被取回。

在OOP中,Object拥有属性,字段,方法。数据库中的表格拥有Columns和primary keys。如果你使用过ORM,那么对象与数据库的映射将非常的简单。

Grails是构建在Spring+Hibernate之上的,不过他提供了一种更简单的映射Grails Object-Relational
Mapping (GORM)。

Grails使用Hibernate’高度定制配置APIs,考虑更加容易使用ORM映射, 通过运用规约的力量使用新的映射战略叫Grails Object-relational Mapping (GORM)。

Domain class 可以通过命令行 create-domain-class创建:

grails create-domain-class Person

 他将创建一个路径为 grails-app/domain/Person.groovy 的类:

class Person {	
}

  假如你在 DataSource设置了 dbCreate property 为 "update", "create" or "create-drop"  , Grails w将自动产生修改你的数据表格。

你可以通过添加属性来定制你的Domain class:

class Person {	
	String name
	Integer age
	Date lastVisit
}

基本的CRUD (Create/Read/Update/Delete) 操作. 

  1. Create:设置Domain属性 然后调用 save方法保存到数据库中(利用潜在的hibernate ORM层):

    def p = new Person(name:"Fred", age:40, lastVisit:new Date())
    p.save()
     注意Groovy中new一个对象与Java中的差别,这点,会在相应的Groovy系列教材中讲到。
  2. Read:Grails 会自动添加一个  id property 在你的 domain class ,通过id来取得对应的Domain class:

    def p = Person.get(1)
    assert 1 == p.id
  3. Update:更新某个实体, 先设置其属性然后再次调用 save 方法:

    def p = Person.get(1)
    p.name = "Bob"
    p.save()
     
  4. Delete:删除实体通过 delete 方法:

    def p = Person.get(1)
    p.delete()
     

下面我们来看下怎么样设计 domain in GORM.

  1. 创建a domain class 你可以在命令行提示符中运行 create-domain-class (必须在项目路径下使用此命令行,谨记!!!):
    grails create-domain-class Book
     结果一个 class 将在你的项目路径grails-app/domain/Book.groovy下被创建:
    class Book {	
    }
     注:假如你想创建packages,只需要把class移动到你相应的packages中,不过必须是在grails-app/domain下,然后按照Java的packages规则来声明packages。上面的Class被自动映射到一个名为book的数据表格中 (和class同样的名字,当然它是小写的).上面这些都是通过ORM Domain Specific Language规约产生的。
  2. 现在可以使用 Java类型来定义你的 properties
    class Book {
    	String title
    	Date releaseDate
    	String ISBN
    }
    每个属性将被映射到 数据库对应表格的column中。这里有个规约:每个 column名字都是小写的,除了class的 properties使用的“驼峰”书写方式的 properties名字就需要使用“—”符号了。比如: releaseDate将被自动写成 release_date。但是你也可以通过Constraints or  ORM DSL.定制。 
  1. One-to-one

class Face {
    Nose nose
}
class Nose {	
}
 上面,我们使用了单向one-to-one 关联从 Face 到 Nose. 如果使用双向one-to-one 关联,看下面的代码:
class Face {
    Nose nose
}
class Nose {	
	Face face
}
 上面两段代码都很容易理解。下面我们看下第3段代码:
class Face {
    Nose nose
}
class Nose {	
	static belongsTo = [face:Face]
}

上面我们使用了“ belongsTo ”,设置 Nose "属于" Face.

new Face(nose:new Nose()).save()

保存Face的同时,必须要保存Nose,因为这里是一个“ belongsTo ”关系,假如你使用下面的代码:

new Nose(face:new Face()).save() // will cause an error

将会产生错误。

就拿客户和订单来做比较,当然这里是使用一对一的,一个客户对应一个订单,保存客户的同时,你得把它的订单一起保存,因为这个订单是属于某个客户的,倒转过来思维,因为订单没有设置belongsTo,也就是说他不会关心他的客户是谁,可以把belongsTo这个看作是某个class的属性,如果你保存一个没有的属性当然会出错,不知道大家能不能理解,这个是我自己的意思。

继续:

def f = Face.get(1)
f.delete() // both Face and Nose deleted

 

删除某个Faces会同时删除对应的Nose,反过来不成立。就如上面所说的,既然某个Nose是某个Face的属性,因为设置了belongsTo,我们暂时这样来理解,如果客户都不存在,订单还有存在的价值吗,其实也就是一个class被删除了,属于他的属性还会继续存在吗?

评论
4 楼 dellsoft 2008-01-08  
可以按照 模板,自定义生产自己的类
3 楼 magibt 2008-01-08  
支持,顶一下
2 楼 cz198366 2008-01-08  
不错!收藏了!
1 楼 xinyi7758521 2008-01-08  
不错,通俗易懂! 

相关推荐

    Grails 1.1 Web Application Development

    ### Grails 1.1 Web Application Development #### 核心知识点概述 《Grails 1.1 Web Application Development》是一本专注于使用Grails框架进行高效Web应用开发的技术书籍。本书由作者Jon Dickinson撰写,旨在...

    Groovy&Grails - 指南.ppt

    5. `grails-app/conf`:配置文件,如 `application.properties` 和 `grails-app/conf/Config.groovy`。 6. `test` 目录:存放单元测试和集成测试。 案例: 一个简单的 Grails 应用可能包括一个用户管理模块。在 `...

    Grails完全入门.pdf

    1. **紧密集成Java平台**:Grails充分利用Java平台的优势,如广泛的库支持和工具链,同时保持调用底层Java框架的灵活性。 2. **规约优于配置**:Grails遵循这一原则,通过文件名和目录结构来推断应用程序的结构,...

    grails开发笔记

    4. **变量作用域**:在 Grails 中,变量的作用域有 `page`、`request`、`flash`、`session` 和 `application` 等。例如,`flash` 用于存储临时消息,如错误信息等。 5. **特殊操作符**:如 `==` 和 `is` 分别对应 ...

    第一个grails程序

    Grails是一种基于Java平台的开源Web应用框架,它采用了Groovy编程语言,旨在提高开发效率和简化开发流程。Grails的设计理念是遵循“约定优于配置”原则,提供了一种快速开发全栈式Web应用的解决方案。由于其与Spring...

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

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

    使用GORM构建Spring Boot应用程序 Grails指南_ Grails框架.pdf

    在本教程中,我们将探讨如何使用GORM(Grails Object-Relational Mapping)构建Spring Boot应用程序。GORM是Grails框架的核心部分,它为开发者提供了简单、强大的数据持久化功能,支持Hibernate和MongoDB等数据库。...

    grails3-rest-sample:使用 Grails 3 实现的简单 REST API。SpringIO15 中使用的代码

    【Grails 3 框架】是 Groovy 语言开发的一个全栈式Web应用框架,它集成了许多现代Java生态系统的组件,如Spring Boot、Hibernate等,提供了快速开发、自动化配置和灵活的元编程特性。Grails 3 的核心目标是提高开发...

    基于grails开发的财政项目

    Grails是一个基于Java平台的开源框架,它结合了Ruby on Rails的敏捷开发理念和Java的强类型、静态检查的优势,提供了一种快速开发全栈式Web应用的方式。 在**描述**中提到,该系统采用了EasyUI作为前端框架。EasyUI...

    java架构图示

    根据给定的信息,本文将对Java相关的架构图进行详细的解读与分析,主要涵盖Spring、Hibernate、Struts(包括Struts1和Struts2)、JSF、Seam、Grails、DWR、J2EE、Oracle等技术栈的核心概念及其架构特点。 ### 1. ...

    Spring.Boot.in.Action.2015.12.pdf

    and out-of-the-box operationalization make java development fun again I,m pleased to report that Spring and spring boot are the foundation of Netflix's new continuous delivery platform. What's more, ...

Global site tag (gtag.js) - Google Analytics