您的位置:首页 > 大数据 > 人工智能

grails学习笔记-4、通过例子了解grails开发的基本流程

2014-01-08 16:06 676 查看
第一步、新建项目:



注意选对grails的版本即可。如果你只装了一个版本的grails,那用默认的即可。

这里我们实现一个对图书的增,删,改。

2、配置数据库连接。

打开conf/DataSource.groovy,改成这样:

dataSource {
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
driverClassName = "org.postgresql.Driver"
//url = "jdbc:postgresql://192.168.1.203:5432/labdb"
url = "jdbc:postgresql://localhost:5432/Test"
dialect = "org.hibernate.dialect.PostgreSQLDialect"
username="root"
password="123456"
logSql = true
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
}


当然,不修改也可以。grails会使用自己带的数据库h2(纯java的内存数据库)。我这里用的是postgresql。所以改了。可以看到这里有3个环境变量development、test、production。在启动项目时,可以通过-Dgrails.env=xx来进行选择。程序启动命令如下:

grails [env]* run-app

例子 grails -Dgrails.env=development run-app。

注意:grails run-app默认使用环境变量development。

命令行输入在这:


3、引入数据库驱动包:postgresql-9.1-902.jdbc4.jar

复制jar包到lib目录下,add to build path,右键-〉grails tools-〉Refresh Dependencies(也可以用命令refresh-dependencies来实现)。

4、新建Domain类。

两种方式:(1)通过命令:create-domain-class Book(2)右键-〉New-〉Domain Class

Book代码如下:

package xmt.test

class Book {
String title
String content
}


5、创建controller和views:两种方式(1)选中Book类,右键-〉new-〉Generate Controller and Views (2)命令grails generate-all xmt.test.Book

grails会自动创建Controller(会自动生成增、删、改、查的相关方法)和View(会自动生成增、删、改、查的相关页面)

BookController:

package xmt.test

import org.springframework.dao.DataIntegrityViolationException

class BookController {

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

def index() {
redirect(action: "list", params: params)
}

def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[bookInstanceList: Book.list(params), bookInstanceTotal: Book.count()]
}

def create() {
[bookInstance: new Book(params)]
}

def save() {
def bookInstance = new Book(params)
if (!bookInstance.save(flush: true)) {
render(view: "create", model: [bookInstance: bookInstance])
return
}

flash.message = message(code: 'default.created.message', args: [message(code: 'book.label', default: 'Book'), bookInstance.id])
redirect(action: "show", id: bookInstance.id)
}

def show(Long id) {
def bookInstance = Book.get(id)
if (!bookInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "list")
return
}

[bookInstance: bookInstance]
}

def edit(Long id) {
def bookInstance = Book.get(id)
if (!bookInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "list")
return
}

[bookInstance: bookInstance]
}

def update(Long id, Long version) {
def bookInstance = Book.get(id)
if (!bookInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "list")
return
}

if (version != null) {
if (bookInstance.version > version) {
bookInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'book.label', default: 'Book')] as Object[],
"Another user has updated this Book while you were editing")
render(view: "edit", model: [bookInstance: bookInstance])
return
}
}

bookInstance.properties = params

if (!bookInstance.save(flush: true)) {
render(view: "edit", model: [bookInstance: bookInstance])
return
}

flash.message = message(code: 'default.updated.message', args: [message(code: 'book.label', default: 'Book'), bookInstance.id])
redirect(action: "show", id: bookInstance.id)
}

def delete(Long id) {
def bookInstance = Book.get(id)
if (!bookInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "list")
return
}

try {
bookInstance.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "list")
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "show", id: id)
}
}
}


Book views:



OK,到这里,一个图书的最基本的模块就开发完了。是不是很简单。

启动程序grails run-app。访问 http://localhost:8080/Test。点击xmt.test.BookController。Book的列表,增、删、改都有了。你可以根据自己的需要进行修改。
以上是最简单的一个例子,意在说明grails项目开发的基本流程。做j2ee的都应该有感受,项目中这种数据的增删改查操作占了很大的比例。有一些简单的项目甚至90%的功能都是这个。有了grails,你就能从这种重复,繁琐的劳动中解脱出来了。

以后我主要会记录我开发中遇到的各种问题和难点,让我费了不少时间的东西,遇到同样问题的朋友就不用再费劲了。而不会介绍如何使用grails,这些你都可以在官方文档上看到,grails的官方文档很不错,你不需要都看,用到什么看什么。官方文档在这:http://grails.org/doc/latest/guide/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: