Grails技术精解与开发实战

Grails技术精解与开发实战
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
2021-05
版次: 1
ISBN: 9787115540515
定价: 69.80
装帧: 平装
页数: 280页
字数: 416千字
4人买过
  • 本书的内容主要分为3部分,共9章。第1部分(第1章与第2章)为Grails框架初探,主要从基本概念出发,介绍 Grails 框架的历史、特征以及组成部分,通过项目引导读者入门,并对Groovy进行了基本介绍。第2部分(第3章到第8章)介绍Grails框架的核心部分,分模块、分功能、多角度对框架进行系统性讲解。第3部分(第9章)为应用实例,以学生信息管理系统为例,从项目创建、数据模型设计、业务逻辑处理、页面渲染到系统测试与部署,全面介绍 Grails 项目开发流程。
      本书结合丰富的代码实例与项目实战,对 Grails 框架的结构与用法做了深入解析。同时,作为技术指导书,本书提供了实例项目的代码库,为开发人员提供良好的学习材料。
      本书的目标读者是具有Java语言基础,并希望学习Java EE的开发人员,以及具有Web框架使用经验,并希望尝试新框架来提高开发效率的开发者。 郭宏宸,毕业于清华大学软件学院,硕士研究生,现任职于北京理工大学网络信息技术中心,主要从事高校信息化建设工作。具有丰富的项目开发经验,对Java EE平台和Grails框架有深入研究。 王永超 北京理工大学网络信息技术中心工程师 贺大庆 北京理工大学网络信息技术中心工程师 第 1 章 Grails 框架简介 . . . . . . . . . . . . . . . . . . . 3 

    1.1 什么是 Grails 框架 . . . . . . . . . . . . . . . . . 3

    1.1.1 Grails 框架的历史 . . . . . . . . . . . 3

    1.1.2 Grails 框架的核心特征 . . . . . . . 4

    1.1.3 Grails 框架的应用框架 . . . . . . . 5

    1.1.4 Grails 框架的应用结构 . . . . . . . 6

    1.2 建立开发环境 . . . . . . . . . . . . . . . . . . . . . . 7

    1.2.1 安装 SDKMAN. . . . . . . . . . . . . . 7

    1.2.2 安装 Java JDK . . . . . . . . . . . . . . 7

    1.2.3 安装 Grails . . . . . . . . . . . . . . . . . . 8

    1.2.4 安装集成开发环境 . . . . . . . . . . . 8

    1.2.5 代码版本控制. . . . . . . . . . . . . . . .9

    1.3 Hello Grails 示例项目. . . . . . . . . . . . . . .9

    1.3.1 创建 Grails 应用. . . . . . . . . . . . . 9

    1.3.2 Grails 框架应用目录结构 . . . . 10

    1.3.3 创建控制器. . . . . . . . . . . . . . . . .11

    1.3.4 创建模型. . . . . . . . . . . . . . . . . . . 12

    1.3.5 利用脚手架特征 . . . . . . . . . . . . 15

    1.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . 16

    第 2 章 Groovy 动态语言. . . . . . . . . . . . . . . . .17

    2.1 Groovy 基础 . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.1 Groovy 运行环境安装 . . . . . . . 17

    2.1.2 基本语法. . . . . . . . . . . . . . . . . . . 20

    2.1.3 数据类型. . . . . . . . . . . . . . . . . . . 23

    2.1.4 运算符. . . . . . . . . . . . . . . . . . . . . 24

    2.1.5 断言语句. . . . . . . . . . . . . . . . . . . 28

    2.1.6 类与对象. . . . . . . . . . . . . . . . . . . 29

    2.2 Groovy 集合类型. . . . . . . . . . . . . . . . . . 33

    2.2.1 列表 . . . . . . . . . . . . . . . . . . . . . . . 33

    2.2.2 映射 . . . . . . . . . . . . . . . . . . . . . . . 36

    2.2.3 范围 . . . . . . . . . . . . . . . . . . . . . . . 38

    2.2.4 集合类型的语法增强 . . . . . . . . 39

    2.3 Groovy 闭包 . . . . . . . . . . . . . . . . . . . . . . 40

    2.3.1 闭包声明. . . . . . . . . . . . . . . . . . . 41

    2.3.2 闭包使用. . . . . . . . . . . . . . . . . . . 41

    2.3.3 闭包中的参数 . . . . . . . . . . . . . . 42

    2.3.4 GString 中使用闭包. . . . . . . . .43

    2.3.5 闭包中的 curry() 方法. . . . . . .45

    2.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . 46

    第 2 部分 Grails 框架核心特性

    第 3 章 数据访问 . . . . . . . . . . . . . . . . . . . . . . . . . 49

    3.1 对象关系映射基础 . . . . . . . . . . . . . . . . . 49

    3.2 基本 CRUD 操作. . . . . . . . . . . . . . . . . .50

    3.2.1 创建 . . . . . . . . . . . . . . . . . . . . . . . 50

    3.2.2 读取 . . . . . . . . . . . . . . . . . . . . . . . 51

    3.2.3 更新 . . . . . . . . . . . . . . . . . . . . . . . 52

    3.2.4 删除 . . . . . . . . . . . . . . . . . . . . . . . 53

    3.3 GORM 基础配置. . . . . . . . . . . . . . . . . . 53

    3.3.1 数据源配置. . . . . . . . . . . . . . . . .53

    3.3.2 配置项参考. . . . . . . . . . . . . . . . .56

    3.3.3 映射与约束. . . . . . . . . . . . . . . . .57

    3.3.4 Hibernate 配置 . . . . . . . . . . . . . 58

    3.4 GORM 建模 . . . . . . . . . . . . . . . . . . . . . . 58

    3.4.1 关联关系. . . . . . . . . . . . . . . . . . . 60

    3.4.2 组合关系. . . . . . . . . . . . . . . . . . . 67

    3.4.3 继承关系. . . . . . . . . . . . . . . . . . . 68

    3.4.4 容器类型. . . . . . . . . . . . . . . . . . . 69

    3.4.5 建模辅助. . . . . . . . . . . . . . . . . . . 71

    3.5 持久化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    3.5.1 事务的延迟写 . . . . . . . . . . . . . . 72

    3.5.2 数据保存. . . . . . . . . . . . . . . . . . . 73

    3.5.3 数据删除. . . . . . . . . . . . . . . . . . . 74

    3.5.4 级联删除与更新 . . . . . . . . . . . . 75

    3.5.5 即时加载与延迟加载 . . . . . . . . 79

    3.5.6 乐观锁与悲观锁 . . . . . . . . . . . . 83

    3.5.7 修改检查. . . . . . . . . . . . . . . . . . . 85

    3.6 GORM 查询 . . . . . . . . . . . . . . . . . . . . . . 86

    3.6.1 list() 方法和 get() 方法. . . . . .86

    3.6.2 动态查询. . . . . . . . . . . . . . . . . . . 87

    3.6.3 Where 查询 . . . . . . . . . . . . . . . . 90

    3.6.4 标准条件查询 . . . . . . . . . . . . . . 98

    3.6.5 HQL 查询. . . . . . . . . . . . . . . . .103

    3.7 GORM 高级特性. . . . . . . . . . . . . . . . . 104

    3.7.1 事件与时间戳 . . . . . . . . . . . . . 105

    3.7.2 自定义 ORM 映射 . . . . . . . . . 109

    3.7.3 默认排序. . . . . . . . . . . . . . . . . .109

    3.7.4 编程式事务. . . . . . . . . . . . . . . .110

    3.8 数据服务层 . . . . . . . . . . . . . . . . . . . . . . 112

    3.8.1 Data Service 基础 . . . . . . . . . 112

    3.8.2 查询操作. . . . . . . . . . . . . . . . . .116

    3.8.3 写操作. . . . . . . . . . . . . . . . . . . . 120

    3.8.4 参数校验. . . . . . . . . . . . . . . . . .121

    3.9 多数据源 . . . . . . . . . . . . . . . . . . . . . . . . 121

    3.9.1 配置多数据源 . . . . . . . . . . . . . 122

    3.9.2 模型与数据源映射 . . . . . . . . . 122

    3.9.3 多数据源使用 . . . . . . . . . . . . . 124

    3.10 多租户 . . . . . . . . . . . . . . . . . . . . . . . . . 125

    3.10.1 多租户模式 . . . . . . . . . . . . . . 125

    3.10.2 配置. . . . . . . . . . . . . . . . . . . . . 126

    3.10.3 使用多租户 . . . . . . . . . . . . . . 126

    3.11 数据约束 . . . . . . . . . . . . . . . . . . . . . . . 129

    3.11.1 定义约束. . . . . . . . . . . . . . . . .130

    3.11.2 约束总结. . . . . . . . . . . . . . . . .131

    3.12 本章小结 . . . . . . . . . . . . . . . . . . . . . . . 132

    第 4 章 控制器 . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    4.1 控制器与动作 . . . . . . . . . . . . . . . . . . . . 133

    4.2 视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    4.2.1 创建视图参数模型 . . . . . . . . . 134

    4.2.2 选择视图文件 . . . . . . . . . . . . . 135

    4.2.3 多样化响应. . . . . . . . . . . . . . . .137

    4.3 作用域变量 . . . . . . . . . . . . . . . . . . . . . . 138

    4.4 重定向 . . . . . . . . . . . . . . . . . . . . . . . . . . 142

    4.4.1 redirect() 方法 . . . . . . . . . . . . 142

    4.4.2 chain() 方法. . . . . . . . . . . . . . .143

    4.5 数据绑定 . . . . . . . . . . . . . . . . . . . . . . . . 144

    4.5.1 绑定基本数据类型属性 . . . . . 145

    4.5.2 绑定集合类型属性 . . . . . . . . . 147

    4.5.3 绑定请求数据 . . . . . . . . . . . . . 150

    4.5.4 Action 参数绑定. . . . . . . . . . . 151

    4.5.5 bindData() 方法 . . . . . . . . . . . 152

    4.6 XML 与 JSON 响应 . . . . . . . . . . . . . . 154

    4.6.1 内容协商. . . . . . . . . . . . . . . . . .154

    4.6.2 使用 format 参数指定请求的内容格式 . . . . . . . . . . . . . . . . . 156

    4.6.3 使用 Accept header 指定请求格式 . . . . . . . . . . . . . . . . . . . . . 157

    4.6.4 使用 URL 扩展名指定请求格式 . . . . . . . . . . . . . . . . . . . . . 157

    4.6.5 使用 respond 返回请求数据 . . . . . . . . . . . . . . . . . . . . . 157

    4.6.6 使用 JSON Views 输出数据 . . . . . . . . . . . . . . . . . . . . . 158

    4.6.7 使用 render() 方法返回JSON . . . . . . . . . . . . . . . . . . . . 159

    4.7 命令对象 . . . . . . . . . . . . . . . . . . . . . . . . 159

    4.7.1 定义命令对象 . . . . . . . . . . . . . 159

    4.7.2 使用命令对象 . . . . . . . . . . . . . 161

    4.7.3 命令对象与请求参数名称 . . . 163

    4.7.4 命令对象与请求体绑定 . . . . . 165

    4.8 异常处理 . . . . . . . . . . . . . . . . . . . . . . . . 166

    4.9 URL 映射 . . . . . . . . . . . . . . . . . . . . . . . 167

    4.9.1 控制器与方法的映射 . . . . . . . 168

    4.9.2 使用 URL 映射进行重定向 . . . . . . . . . . . . . . . . . . . . . 169

    4.9.3 绑定变量. . . . . . . . . . . . . . . . . .169

    4.9.4 视图以及请求、响应映射 . . . 171

    4.9.5 映射中的 URL 通配符. . . . . .172

    4.9.6 链接自动重写 . . . . . . . . . . . . . 173

    4.9.7 映射中添加约束 . . . . . . . . . . . 173

    4.10 拦截器 . . . . . . . . . . . . . . . . . . . . . . . . . 174

    4.10.1 拦截条件配置 . . . . . . . . . . . . 175

    4.10.2 拦截器优先级配置 . . . . . . . . 176

    4.11 本章小结 . . . . . . . . . . . . . . . . . . . . . . . 176

    第 5 章 GSP 页面展示. . . . . . . . . . . . . . . . . . .178

    5.1 GSP 基础 . . . . . . . . . . . . . . . . . . . . . . . 178

    5.2 GSP 标签 . . . . . . . . . . . . . . . . . . . . . . . 180

    5.2.1 GSP 标签基本用法 . . . . . . . . 181

    5.2.2 调用标签. . . . . . . . . . . . . . . . . .184

    5.3 视图与模板 . . . . . . . . . . . . . . . . . . . . . . 185

    5.3.1 共享模板. . . . . . . . . . . . . . . . . .185

    5.3.2 在控制器中使用模板 . . . . . . . 186

    5.4 布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

    5.5 静态资源 . . . . . . . . . . . . . . . . . . . . . . . . 188

    5.6 自定义标签 . . . . . . . . . . . . . . . . . . . . . . 190

    5.6.1 逻辑控制. . . . . . . . . . . . . . . . . .192

    5.6.2 循环显示. . . . . . . . . . . . . . . . . .192

    5.6.3 标签命名空间 . . . . . . . . . . . . . 193

    5.7 脚手架 . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    5.7.1 动态脚手架. . . . . . . . . . . . . . . .194

    5.7.2 静态脚手架. . . . . . . . . . . . . . . .194

    5.8 国际化 . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    5.8.1 读取消息. . . . . . . . . . . . . . . . . .195

    5.8.2 消息参数. . . . . . . . . . . . . . . . . .196

    5.9 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 197

    第 6 章 服务层 . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    6.1 服务层基础 . . . . . . . . . . . . . . . . . . . . . . 198

    6.2 Service 作用域 . . . . . . . . . . . . . . . . . . . 199

    6.3 事务处理 . . . . . . . . . . . . . . . . . . . . . . . . 200

    6.3.1 使用事务. . . . . . . . . . . . . . . . . .200

    6.3.2 事务与 session . . . . . . . . . . . . . 202

    6.4 依赖注入 . . . . . . . . . . . . . . . . . . . . . . . . 204

    6.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 205

    第 7 章 测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

    7.1 测试框架 Spock . . . . . . . . . . . . . . . . . . 207

    7.2 单元测试 . . . . . . . . . . . . . . . . . . . . . . . . 208

    7.3 集成测试 . . . . . . . . . . . . . . . . . . . . . . . . 211

    7.3.1 事务. . . . . . . . . . . . . . . . . . . . . . 212

    7.3.2 注入. . . . . . . . . . . . . . . . . . . . . . 212

    7.4 功能测试 . . . . . . . . . . . . . . . . . . . . . . . . 213

    7.4.1 Geb . . . . . . . . . . . . . . . . . . . . . . 213

    7.4.2 REST 接口测试 . . . . . . . . . . . 214

    7.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 215

    第 8 章 插件体系 . . . . . . . . . . . . . . . . . . . . . . . . 217

    8.1 创建插件 . . . . . . . . . . . . . . . . . . . . . . . . 217

    8.1.1 开发插件. . . . . . . . . . . . . . . . . .219

    8.1.2 使用插件与发布插件 . . . . . . . 221

    8.2 插件高级特性 . . . . . . . . . . . . . . . . . . . . 222

    8.2.1 doWithSpring() . . . . . . . . . . . 223

    8.2.2 doWithApplicationContext(). . . . . . . . . . . . . . . . . 225

    8.2.3 doWithDynamicMethods() . . . . . . . . . . . . . . . . 225

    8.2.4 onChange() . . . . . . . . . . . . . . . 226

    8.2.5 组件加载顺序 . . . . . . . . . . . . . 227

    8.3 自定义组件 . . . . . . . . . . . . . . . . . . . . . . 228

    8.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 233

    第 3 部分 应用实例

    第 9 章 Grails 框架开发实例实践. . . . . . . . . 237

    9.1 环境准备 . . . . . . . . . . . . . . . . . . . . . . . . 238

    9.1.1 创建应用程序 . . . . . . . . . . . . . 238

    9.1.2 修改配置. . . . . . . . . . . . . . . . . .240

    9.2 创建模型 . . . . . . . . . . . . . . . . . . . . . . . . 242

    9.3 构建业务模型 . . . . . . . . . . . . . . . . . . . . 244

    9.4 创建页面模板 . . . . . . . . . . . . . . . . . . . . 247

    9.4.1 修改 layout . . . . . . . . . . . . . . . 247

    9.4.2 修改 templates 文件 . . . . . . . 248

    9.4.3 编写 GSP 文件 . . . . . . . . . . . . 249

    9.4.4 使用 fifields 插件定制内容显示 . . . . . . . . . . . . . . . . . . . . . 251

    9.4.5 使用 Taglib . . . . . . . . . . . . . . . 256

    9.5 认证和权限控制 . . . . . . . . . . . . . . . . . . 257

    9.6 自定义 Action 和 Service 使用. . . . .261

    9.7 记录查询 . . . . . . . . . . . . . . . . . . . . . . . . 267

    9.7.1 添加查询表单 . . . . . . . . . . . . . 267

    9.7.2 编写 index() 方法. . . . . . . . . .269

    9.7.3 联合查询. . . . . . . . . . . . . . . . . .270

    9.8 多租户的实现 . . . . . . . . . . . . . . . . . . . . 271

    9.9 项目测试 . . . . . . . . . . . . . . . . . . . . . . . . 273

    9.9.1 测试模型约束条件 . . . . . . . . . 273

    9.9.2 测试控制器方法请求 . . . . . . . 275

    9.9.3 集成测试服务层功能 . . . . . . . 276

    9.10 构建部署 . . . . . . . . . . . . . . . . . . . . . . . 277

    9.10.1 独立部署. . . . . . . . . . . . . . . . .277

    9.10.2 容器部署. . . . . . . . . . . . . . . . .278

    9.10.3 使用 Docker 镜像. . . . . . . . . 278

    9.10.4 启用 HTTPS . . . . . . . . . . . . . 279

    9.11 本章小结 . . . . . . . . . . . . . . . . . . . . . . . 280
  • 内容简介:
    本书的内容主要分为3部分,共9章。第1部分(第1章与第2章)为Grails框架初探,主要从基本概念出发,介绍 Grails 框架的历史、特征以及组成部分,通过项目引导读者入门,并对Groovy进行了基本介绍。第2部分(第3章到第8章)介绍Grails框架的核心部分,分模块、分功能、多角度对框架进行系统性讲解。第3部分(第9章)为应用实例,以学生信息管理系统为例,从项目创建、数据模型设计、业务逻辑处理、页面渲染到系统测试与部署,全面介绍 Grails 项目开发流程。
      本书结合丰富的代码实例与项目实战,对 Grails 框架的结构与用法做了深入解析。同时,作为技术指导书,本书提供了实例项目的代码库,为开发人员提供良好的学习材料。
      本书的目标读者是具有Java语言基础,并希望学习Java EE的开发人员,以及具有Web框架使用经验,并希望尝试新框架来提高开发效率的开发者。
  • 作者简介:
    郭宏宸,毕业于清华大学软件学院,硕士研究生,现任职于北京理工大学网络信息技术中心,主要从事高校信息化建设工作。具有丰富的项目开发经验,对Java EE平台和Grails框架有深入研究。 王永超 北京理工大学网络信息技术中心工程师 贺大庆 北京理工大学网络信息技术中心工程师
  • 目录:
    第 1 章 Grails 框架简介 . . . . . . . . . . . . . . . . . . . 3 

    1.1 什么是 Grails 框架 . . . . . . . . . . . . . . . . . 3

    1.1.1 Grails 框架的历史 . . . . . . . . . . . 3

    1.1.2 Grails 框架的核心特征 . . . . . . . 4

    1.1.3 Grails 框架的应用框架 . . . . . . . 5

    1.1.4 Grails 框架的应用结构 . . . . . . . 6

    1.2 建立开发环境 . . . . . . . . . . . . . . . . . . . . . . 7

    1.2.1 安装 SDKMAN. . . . . . . . . . . . . . 7

    1.2.2 安装 Java JDK . . . . . . . . . . . . . . 7

    1.2.3 安装 Grails . . . . . . . . . . . . . . . . . . 8

    1.2.4 安装集成开发环境 . . . . . . . . . . . 8

    1.2.5 代码版本控制. . . . . . . . . . . . . . . .9

    1.3 Hello Grails 示例项目. . . . . . . . . . . . . . .9

    1.3.1 创建 Grails 应用. . . . . . . . . . . . . 9

    1.3.2 Grails 框架应用目录结构 . . . . 10

    1.3.3 创建控制器. . . . . . . . . . . . . . . . .11

    1.3.4 创建模型. . . . . . . . . . . . . . . . . . . 12

    1.3.5 利用脚手架特征 . . . . . . . . . . . . 15

    1.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . 16

    第 2 章 Groovy 动态语言. . . . . . . . . . . . . . . . .17

    2.1 Groovy 基础 . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.1 Groovy 运行环境安装 . . . . . . . 17

    2.1.2 基本语法. . . . . . . . . . . . . . . . . . . 20

    2.1.3 数据类型. . . . . . . . . . . . . . . . . . . 23

    2.1.4 运算符. . . . . . . . . . . . . . . . . . . . . 24

    2.1.5 断言语句. . . . . . . . . . . . . . . . . . . 28

    2.1.6 类与对象. . . . . . . . . . . . . . . . . . . 29

    2.2 Groovy 集合类型. . . . . . . . . . . . . . . . . . 33

    2.2.1 列表 . . . . . . . . . . . . . . . . . . . . . . . 33

    2.2.2 映射 . . . . . . . . . . . . . . . . . . . . . . . 36

    2.2.3 范围 . . . . . . . . . . . . . . . . . . . . . . . 38

    2.2.4 集合类型的语法增强 . . . . . . . . 39

    2.3 Groovy 闭包 . . . . . . . . . . . . . . . . . . . . . . 40

    2.3.1 闭包声明. . . . . . . . . . . . . . . . . . . 41

    2.3.2 闭包使用. . . . . . . . . . . . . . . . . . . 41

    2.3.3 闭包中的参数 . . . . . . . . . . . . . . 42

    2.3.4 GString 中使用闭包. . . . . . . . .43

    2.3.5 闭包中的 curry() 方法. . . . . . .45

    2.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . . 46

    第 2 部分 Grails 框架核心特性

    第 3 章 数据访问 . . . . . . . . . . . . . . . . . . . . . . . . . 49

    3.1 对象关系映射基础 . . . . . . . . . . . . . . . . . 49

    3.2 基本 CRUD 操作. . . . . . . . . . . . . . . . . .50

    3.2.1 创建 . . . . . . . . . . . . . . . . . . . . . . . 50

    3.2.2 读取 . . . . . . . . . . . . . . . . . . . . . . . 51

    3.2.3 更新 . . . . . . . . . . . . . . . . . . . . . . . 52

    3.2.4 删除 . . . . . . . . . . . . . . . . . . . . . . . 53

    3.3 GORM 基础配置. . . . . . . . . . . . . . . . . . 53

    3.3.1 数据源配置. . . . . . . . . . . . . . . . .53

    3.3.2 配置项参考. . . . . . . . . . . . . . . . .56

    3.3.3 映射与约束. . . . . . . . . . . . . . . . .57

    3.3.4 Hibernate 配置 . . . . . . . . . . . . . 58

    3.4 GORM 建模 . . . . . . . . . . . . . . . . . . . . . . 58

    3.4.1 关联关系. . . . . . . . . . . . . . . . . . . 60

    3.4.2 组合关系. . . . . . . . . . . . . . . . . . . 67

    3.4.3 继承关系. . . . . . . . . . . . . . . . . . . 68

    3.4.4 容器类型. . . . . . . . . . . . . . . . . . . 69

    3.4.5 建模辅助. . . . . . . . . . . . . . . . . . . 71

    3.5 持久化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    3.5.1 事务的延迟写 . . . . . . . . . . . . . . 72

    3.5.2 数据保存. . . . . . . . . . . . . . . . . . . 73

    3.5.3 数据删除. . . . . . . . . . . . . . . . . . . 74

    3.5.4 级联删除与更新 . . . . . . . . . . . . 75

    3.5.5 即时加载与延迟加载 . . . . . . . . 79

    3.5.6 乐观锁与悲观锁 . . . . . . . . . . . . 83

    3.5.7 修改检查. . . . . . . . . . . . . . . . . . . 85

    3.6 GORM 查询 . . . . . . . . . . . . . . . . . . . . . . 86

    3.6.1 list() 方法和 get() 方法. . . . . .86

    3.6.2 动态查询. . . . . . . . . . . . . . . . . . . 87

    3.6.3 Where 查询 . . . . . . . . . . . . . . . . 90

    3.6.4 标准条件查询 . . . . . . . . . . . . . . 98

    3.6.5 HQL 查询. . . . . . . . . . . . . . . . .103

    3.7 GORM 高级特性. . . . . . . . . . . . . . . . . 104

    3.7.1 事件与时间戳 . . . . . . . . . . . . . 105

    3.7.2 自定义 ORM 映射 . . . . . . . . . 109

    3.7.3 默认排序. . . . . . . . . . . . . . . . . .109

    3.7.4 编程式事务. . . . . . . . . . . . . . . .110

    3.8 数据服务层 . . . . . . . . . . . . . . . . . . . . . . 112

    3.8.1 Data Service 基础 . . . . . . . . . 112

    3.8.2 查询操作. . . . . . . . . . . . . . . . . .116

    3.8.3 写操作. . . . . . . . . . . . . . . . . . . . 120

    3.8.4 参数校验. . . . . . . . . . . . . . . . . .121

    3.9 多数据源 . . . . . . . . . . . . . . . . . . . . . . . . 121

    3.9.1 配置多数据源 . . . . . . . . . . . . . 122

    3.9.2 模型与数据源映射 . . . . . . . . . 122

    3.9.3 多数据源使用 . . . . . . . . . . . . . 124

    3.10 多租户 . . . . . . . . . . . . . . . . . . . . . . . . . 125

    3.10.1 多租户模式 . . . . . . . . . . . . . . 125

    3.10.2 配置. . . . . . . . . . . . . . . . . . . . . 126

    3.10.3 使用多租户 . . . . . . . . . . . . . . 126

    3.11 数据约束 . . . . . . . . . . . . . . . . . . . . . . . 129

    3.11.1 定义约束. . . . . . . . . . . . . . . . .130

    3.11.2 约束总结. . . . . . . . . . . . . . . . .131

    3.12 本章小结 . . . . . . . . . . . . . . . . . . . . . . . 132

    第 4 章 控制器 . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    4.1 控制器与动作 . . . . . . . . . . . . . . . . . . . . 133

    4.2 视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    4.2.1 创建视图参数模型 . . . . . . . . . 134

    4.2.2 选择视图文件 . . . . . . . . . . . . . 135

    4.2.3 多样化响应. . . . . . . . . . . . . . . .137

    4.3 作用域变量 . . . . . . . . . . . . . . . . . . . . . . 138

    4.4 重定向 . . . . . . . . . . . . . . . . . . . . . . . . . . 142

    4.4.1 redirect() 方法 . . . . . . . . . . . . 142

    4.4.2 chain() 方法. . . . . . . . . . . . . . .143

    4.5 数据绑定 . . . . . . . . . . . . . . . . . . . . . . . . 144

    4.5.1 绑定基本数据类型属性 . . . . . 145

    4.5.2 绑定集合类型属性 . . . . . . . . . 147

    4.5.3 绑定请求数据 . . . . . . . . . . . . . 150

    4.5.4 Action 参数绑定. . . . . . . . . . . 151

    4.5.5 bindData() 方法 . . . . . . . . . . . 152

    4.6 XML 与 JSON 响应 . . . . . . . . . . . . . . 154

    4.6.1 内容协商. . . . . . . . . . . . . . . . . .154

    4.6.2 使用 format 参数指定请求的内容格式 . . . . . . . . . . . . . . . . . 156

    4.6.3 使用 Accept header 指定请求格式 . . . . . . . . . . . . . . . . . . . . . 157

    4.6.4 使用 URL 扩展名指定请求格式 . . . . . . . . . . . . . . . . . . . . . 157

    4.6.5 使用 respond 返回请求数据 . . . . . . . . . . . . . . . . . . . . . 157

    4.6.6 使用 JSON Views 输出数据 . . . . . . . . . . . . . . . . . . . . . 158

    4.6.7 使用 render() 方法返回JSON . . . . . . . . . . . . . . . . . . . . 159

    4.7 命令对象 . . . . . . . . . . . . . . . . . . . . . . . . 159

    4.7.1 定义命令对象 . . . . . . . . . . . . . 159

    4.7.2 使用命令对象 . . . . . . . . . . . . . 161

    4.7.3 命令对象与请求参数名称 . . . 163

    4.7.4 命令对象与请求体绑定 . . . . . 165

    4.8 异常处理 . . . . . . . . . . . . . . . . . . . . . . . . 166

    4.9 URL 映射 . . . . . . . . . . . . . . . . . . . . . . . 167

    4.9.1 控制器与方法的映射 . . . . . . . 168

    4.9.2 使用 URL 映射进行重定向 . . . . . . . . . . . . . . . . . . . . . 169

    4.9.3 绑定变量. . . . . . . . . . . . . . . . . .169

    4.9.4 视图以及请求、响应映射 . . . 171

    4.9.5 映射中的 URL 通配符. . . . . .172

    4.9.6 链接自动重写 . . . . . . . . . . . . . 173

    4.9.7 映射中添加约束 . . . . . . . . . . . 173

    4.10 拦截器 . . . . . . . . . . . . . . . . . . . . . . . . . 174

    4.10.1 拦截条件配置 . . . . . . . . . . . . 175

    4.10.2 拦截器优先级配置 . . . . . . . . 176

    4.11 本章小结 . . . . . . . . . . . . . . . . . . . . . . . 176

    第 5 章 GSP 页面展示. . . . . . . . . . . . . . . . . . .178

    5.1 GSP 基础 . . . . . . . . . . . . . . . . . . . . . . . 178

    5.2 GSP 标签 . . . . . . . . . . . . . . . . . . . . . . . 180

    5.2.1 GSP 标签基本用法 . . . . . . . . 181

    5.2.2 调用标签. . . . . . . . . . . . . . . . . .184

    5.3 视图与模板 . . . . . . . . . . . . . . . . . . . . . . 185

    5.3.1 共享模板. . . . . . . . . . . . . . . . . .185

    5.3.2 在控制器中使用模板 . . . . . . . 186

    5.4 布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

    5.5 静态资源 . . . . . . . . . . . . . . . . . . . . . . . . 188

    5.6 自定义标签 . . . . . . . . . . . . . . . . . . . . . . 190

    5.6.1 逻辑控制. . . . . . . . . . . . . . . . . .192

    5.6.2 循环显示. . . . . . . . . . . . . . . . . .192

    5.6.3 标签命名空间 . . . . . . . . . . . . . 193

    5.7 脚手架 . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    5.7.1 动态脚手架. . . . . . . . . . . . . . . .194

    5.7.2 静态脚手架. . . . . . . . . . . . . . . .194

    5.8 国际化 . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    5.8.1 读取消息. . . . . . . . . . . . . . . . . .195

    5.8.2 消息参数. . . . . . . . . . . . . . . . . .196

    5.9 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 197

    第 6 章 服务层 . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    6.1 服务层基础 . . . . . . . . . . . . . . . . . . . . . . 198

    6.2 Service 作用域 . . . . . . . . . . . . . . . . . . . 199

    6.3 事务处理 . . . . . . . . . . . . . . . . . . . . . . . . 200

    6.3.1 使用事务. . . . . . . . . . . . . . . . . .200

    6.3.2 事务与 session . . . . . . . . . . . . . 202

    6.4 依赖注入 . . . . . . . . . . . . . . . . . . . . . . . . 204

    6.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 205

    第 7 章 测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

    7.1 测试框架 Spock . . . . . . . . . . . . . . . . . . 207

    7.2 单元测试 . . . . . . . . . . . . . . . . . . . . . . . . 208

    7.3 集成测试 . . . . . . . . . . . . . . . . . . . . . . . . 211

    7.3.1 事务. . . . . . . . . . . . . . . . . . . . . . 212

    7.3.2 注入. . . . . . . . . . . . . . . . . . . . . . 212

    7.4 功能测试 . . . . . . . . . . . . . . . . . . . . . . . . 213

    7.4.1 Geb . . . . . . . . . . . . . . . . . . . . . . 213

    7.4.2 REST 接口测试 . . . . . . . . . . . 214

    7.5 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 215

    第 8 章 插件体系 . . . . . . . . . . . . . . . . . . . . . . . . 217

    8.1 创建插件 . . . . . . . . . . . . . . . . . . . . . . . . 217

    8.1.1 开发插件. . . . . . . . . . . . . . . . . .219

    8.1.2 使用插件与发布插件 . . . . . . . 221

    8.2 插件高级特性 . . . . . . . . . . . . . . . . . . . . 222

    8.2.1 doWithSpring() . . . . . . . . . . . 223

    8.2.2 doWithApplicationContext(). . . . . . . . . . . . . . . . . 225

    8.2.3 doWithDynamicMethods() . . . . . . . . . . . . . . . . 225

    8.2.4 onChange() . . . . . . . . . . . . . . . 226

    8.2.5 组件加载顺序 . . . . . . . . . . . . . 227

    8.3 自定义组件 . . . . . . . . . . . . . . . . . . . . . . 228

    8.4 本章小结 . . . . . . . . . . . . . . . . . . . . . . . . 233

    第 3 部分 应用实例

    第 9 章 Grails 框架开发实例实践. . . . . . . . . 237

    9.1 环境准备 . . . . . . . . . . . . . . . . . . . . . . . . 238

    9.1.1 创建应用程序 . . . . . . . . . . . . . 238

    9.1.2 修改配置. . . . . . . . . . . . . . . . . .240

    9.2 创建模型 . . . . . . . . . . . . . . . . . . . . . . . . 242

    9.3 构建业务模型 . . . . . . . . . . . . . . . . . . . . 244

    9.4 创建页面模板 . . . . . . . . . . . . . . . . . . . . 247

    9.4.1 修改 layout . . . . . . . . . . . . . . . 247

    9.4.2 修改 templates 文件 . . . . . . . 248

    9.4.3 编写 GSP 文件 . . . . . . . . . . . . 249

    9.4.4 使用 fifields 插件定制内容显示 . . . . . . . . . . . . . . . . . . . . . 251

    9.4.5 使用 Taglib . . . . . . . . . . . . . . . 256

    9.5 认证和权限控制 . . . . . . . . . . . . . . . . . . 257

    9.6 自定义 Action 和 Service 使用. . . . .261

    9.7 记录查询 . . . . . . . . . . . . . . . . . . . . . . . . 267

    9.7.1 添加查询表单 . . . . . . . . . . . . . 267

    9.7.2 编写 index() 方法. . . . . . . . . .269

    9.7.3 联合查询. . . . . . . . . . . . . . . . . .270

    9.8 多租户的实现 . . . . . . . . . . . . . . . . . . . . 271

    9.9 项目测试 . . . . . . . . . . . . . . . . . . . . . . . . 273

    9.9.1 测试模型约束条件 . . . . . . . . . 273

    9.9.2 测试控制器方法请求 . . . . . . . 275

    9.9.3 集成测试服务层功能 . . . . . . . 276

    9.10 构建部署 . . . . . . . . . . . . . . . . . . . . . . . 277

    9.10.1 独立部署. . . . . . . . . . . . . . . . .277

    9.10.2 容器部署. . . . . . . . . . . . . . . . .278

    9.10.3 使用 Docker 镜像. . . . . . . . . 278

    9.10.4 启用 HTTPS . . . . . . . . . . . . . 279

    9.11 本章小结 . . . . . . . . . . . . . . . . . . . . . . . 280
查看详情
相关图书 / 更多
Grails技术精解与开发实战
Green Chemistry——Process Technology and Sustainable Development(绿色化学技术及可持续发展)
陆胤
Grails技术精解与开发实战
Grasshopper形式解析案例与模式
付汉东 著
Grails技术精解与开发实战
GraalVM与Java静态编译:原理与应用
林子熠
Grails技术精解与开发实战
Grant解剖学操作指南(第17版)
欧阳钧 译;[美]阿朗·德东(Alan Detton)
Grails技术精解与开发实战
Graphite监控
[美]Jason Dixon(杰森·迪克森)
Grails技术精解与开发实战
Grasshopper参数化技术:从基础建模到数字设计
燕海南;杨艳;曹雅男;王军
Grails技术精解与开发实战
Greenplum构建实时数据仓库实践
王雪迎
Grails技术精解与开发实战
Gromov 的数学世界(下册)
M. 格罗莫夫 著;季理真 选文;梅加强
Grails技术精解与开发实战
GraphPad Prism科技绘图与数据分析
丁金滨;宗敏
Grails技术精解与开发实战
Gregory儿科麻醉学(原书第6版)
[美]Dean B. Andropoulos;[美]George A. Gregory
Grails技术精解与开发实战
Grace说感恩——Grace系列第四册!
廖树清 文/图
Grails技术精解与开发实战
GraphPad Prism学术图表(全彩)
张敏(@如图所示