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

第一步、新建项目:

注意选对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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值