Grails框架使用教程

第一章  grails框架简介

1.1  简介

    Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。

第二章  grails使用

2.1  教程环境介绍

▲系统:windows 10

▲grails框架:2.4.4

▲jdk版本:

java version "1.8.0_45"

Java(TM) SE Runtime Environment (build 1.8.0_45-b15)

Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

○开发工具:GGTS 32位

○数据库:postgreSql 32位

2.2  GGTS中的工程

2.2.1  创建Grsils框架的工程

●打开GGTS

○创建工程

 

○创建成功之后

▲注意:正常的是在上面这种视图中是没有红色的感叹号或者是红叉的

2.2.2  .m2文件夹及其其他文件夹说明

在正常的grails框架中,去正常的创建完成一个工程,就会在你的系统所对因个的用户的文件夹下面生成相应的文件夹

如下:

△.m2文件夹说明

在此文夹下面的下一层中就是grails工程所需要的插件jar包

对于这个:等同于C:\Users\Administrator\.grails\ivy-cache路径下面的插件,但是最终去加载的始终还是.m2中的插件。

2.3  grails框架文档查阅的步骤

2.3.1  官网grails框架文档查阅

●grails官网地址:http://www.grails.org/

▲由于在github上面的版本比较全面

▲对于点击此处,可以看到帮助文档

下面我们找到本教程对应的grails2.4.4版本所对应的文档

▲还可以下载文档到本地,包括框架和源码

■现在我们点击在线文档进入到框架说明文档

2.3.2  官网grails框架插件文档查阅

●可以看到有很多的插件

点击序号1就可以进入该插件对应的位置

在此查阅官方文档说明到此结束

2.4  回到工程

2.4.1  配置

▲配置文件

配置数据源DataSource.groovy

插件配置BuildConfig.groovy

主配置(log4j日志的配置)Config.groovy

启动文件的配置(刚开始不需要)BootStrap.groovy

URL地址映射的配置UrlMappings.groovy

对于其他的配置在使用时再行添加

2.4.2  postgresql的链接

数据库驱动采用:org.postgresql.Driver

数据库连接的URL:jdbc:postgresql://127.0.0.1:5432/postgres

2.4.3  JPA

查询能力:JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

高级特性:JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

第三章  grails领域模型

创建一个domain类

命令:create-domain-class com.by.pgsql.Person

给class中写入属性后

想要在数据库中看到此表,有一种方法可以刷新(在运行工程时时间长的情况)

命令:console

插入数据

简单的一种方法获取数据get

load和read的区别

数据的更新

注意:当直接使用save的时候,里面没有参数的时候是不会实时的刷新到数据库中的,要是有flush:true的时候会及时的刷新到数据库对应的表中的。

删除数据

说明:还是上面的一样的情形。都是因为flush的缘故(都是因为有没有刷新到数据库)

●创建一个不同包中的domain来进行实验

命令:grails create-domain-class org.bookstore.Book

2.2  一对一

创建两个domain

  • create-domain-class face
  • create-domain-class Nose

face中有一个nose的情况

此时数据库表中的关系应该是:

对于现在里面数据的管理:

在postfreSQL数据库中,对于grails工程来说,当配置中使用的是update或者是create-drop等可以使得自己创建数据库表的情况下,在postgreSQL中生成了一个序列,默认的话就只有这一个序列,那么这有什么样的影响呢?

影响:若是在这个数据库中有不止一张表的情况,那么在每个表中有数据的时候ID不可能是从1开始的,而是从这个序列产生的1……n开始的某一个数。

插入数据

//one to one

    def faceAndNose1 = {

        

        //创建一个Face 先不创建Nose,应该是不能被保存到数据库中的

        def f = new Face()

        def rtn = f.save(flush:true)

        println rtn

}

def faceAndNose2 = {

        //创建Nose 先进行保存,然后以创建出来的nose为创建face的参数进行传递,然后进行保存face

        def n = new Nose()

        def rtn1 = n.save(flush:true)

        def f = new Face(nose:n)

        def rtn2 = f.save(flush:true)

        

        println "rtn1 = ${rtn1} && rtn2 = ${rtn2}"

    } //返回值并不是一个整数,而是存入数据库的对象

要是去删除表中的数据

  1. 按照先删除表Face中的数据,应该是可以删除成功的
  2. 但是现在想要在这种情况之下先删除Nose表中的数据,应该是不能被删除的情况,下面进行实验

上面的1和2是正确的,因为外键的关联致使不能这样做

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2.2.1  beLongTo的说明

上面的难道就是书里面说的单向的。

在文档中有一个belongsTo的说明,下面暂且试试

改变Nose中的内容

表中的数据还是没有发生改变,表中的结构也没有发生改变

但是保存数据的时候是没有区别的,但是在删除数据的时候是有很大的区别的,之前说的删除数据的时候是直接删除的是Face表中的数据,但是对Nose表中的数据是没有影响的。但是有了beLongTo之后,删除表Face中的一条数据的同时,由于和Nose表中的数据有关联(外键关联),由于现在是双向的,所以外键关联的那个也会被删除,这是相对于Nose表中的那条数据是和Face中的数据一一对应的那个。

但是Nose中的一个主键是Face中的多条数据中都有的情况下,应该是不会被删除的。

也就是:如图

删除别的相关的数据:

要是想删除的话,必须把Nose(就是bolongto存在的那一方的给删除了)

经过实验这样也是删除不了的。

那么应该怎么删除呢?

在上面Nose中使用了belong之后不能用Nose.get()来获取数据了(?)

2.2.2  hasOne的说明

数据的更新和删除

使用hasOne会在使用方逆方向上Nose上面创建一个face的外键,也是双向的。和上面的belongto是相同的。

这种情况中nose unique: true,所以在nose表中的外键face_id是唯一约束的。

2.2.3  Person中的Person

数据表中的数据