grails框架入門小結(一)—後臺基礎搭建

imz0xy發表於2016-12-06

以下僅僅是個人理解,只記錄自己在開發中的問題:

1,官網下載JDK1.7及以上,配置其系統變數(path):安裝目錄/bin; 安裝目錄/jre/bin;

2,下載grails-2.5.4,或其他版本,配置其系統變數(path):安裝目錄/bin;

3,Intellij IDEA2016.3 ,MySQL免安裝版,apache-maven-3.2.5;

4,開始開發了:

      1)在IDEA中新建一個grails工程

      2)conf / DataSource.grovy 此配置檔案按照如下方式配置:(我使用的是MySQL資料庫免安裝版,此處另外需要在lib目錄下加入mysql-connector-java-5.1.21-bin.jar(也可以是其他版本...自行配置)這個連線jar包)

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
    username = "root"  //資料庫的userName
    password = "123456"  //資料庫的密碼,此處不再詳解MySQL免安裝資料庫的使用及配置。可百度搜尋。
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
}
environments {
    development {
        dataSource {
            dbCreate = "update" 
            url = "jdbc:mysql://localhost:3306/grails?useUnicode=true&characterEncoding=utf8"
            dialect = org.hibernate.dialect.MySQL5InnoDBDialect
            logSql = true
            formatSql = true
        }
    }
    test {
        dataSource {
            dbCreate = "update"

//jdbc:mysql://localhost:埠號/MySQL的database的名字
//此處不再詳解MySQL的資料庫database,推薦使用一款叫做Navicat的資料庫視覺化工具,可以在其中建立資料庫
//以及對資料庫database的資料表進行操作。

            url = "jdbc:mysql://localhost:3306/grails"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:mysql://localhost:3306/grails"
            pooled = true
            properties {
                maxActive = -1
                minEvictableIdleTimeMillis=1800000
                timeBetweenEvictionRunsMillis=1800000
                numTestsPerEvictionRun=3
                testOnBorrow=true
                testWhileIdle=true
                testOnReturn=true
                validationQuery="SELECT 1"
            }
        }
    }
}

          連線資料庫成功之後,就可以讓grails自動建立表啦!在domain中建立對應資料表的實體類。可以設定表與表之間的關係。之後在視覺化工具Navicat中對資料庫執行增刪改查操作,或者也可以在BootsStrap.grovy中位資料庫插入初始資料。 

         MySQL一對一,一對多關係詳情見這篇文件。http://note.youdao.com/share/?id=0b73b72fb5fdec037aee3319da9fb6bc&type=note#/

 

  3).在conf / BuildConfig.grovy中可以配置以下引數:(也可以不配置)

ps:這個地方要改run屬性

grails.project.fork = [
..
 run: false,
.. ]
grails.project.dependency.resolver = "maven" //可支援maven,或ivy

grails.server.port.http=9090 //可處理出現埠號重複等問題

  4).此時可以建立Controller,要知道在瀏覽器中訪問工程的路徑是:http: // localhost:8080 / 埠號 / Controller名 / 方法名

        在controller中可以注入service,此處體現的就是Spring的自動裝配,我們需要在spring的配置檔案中配置service的bean。

        注入bean:conf / Spring / resource.xml 如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="simpleService" class="shopapi.SimpleService"></bean>

</beans>

  5)不同於SSH,Grails不僅僅能幫助我們自動建立資料表,此外還幫我們寫好運算元據庫的方法,例如findAll(),findAllBy..(),我們要做的就是在service層中進行設計。比如在某個方法中,使用實體類去呼叫其增刪改查的方法。然後在controller中呼叫service。這樣就完成了對資料庫的操作。因其ORM層是使用Hibernate,所以我們不需要寫SQL語句。


 6)另外很重要的一點,controller跟前端頁面進行JSON資料傳輸。

    在Controller中設計方法:如下

class ItemTypeController {
    SimpleService simpleService
    def index() {
        def list = simpleService.getAllItemType()
        def data = ['data' : list] as JSON
        render data }}

  從這個方法中,可以看出我們是怎麼使用render對資料進行JSON傳輸的用法。另外如果需要,還要對頁面傳輸的資料進行型別轉換。以及params.get()的使用如下。

class ItemListController {
    SimpleService simpleService
    def getItemList(){
        def id = params.get('id')
        int typeId = id as Integer
        def list = simpleService.getItemListById(typeId)
        def data =  ['data' : list] as JSON
        render data}}

      7)解決一個跨域問題:

     在conf目錄下,建立一個filter,如下配置一些請求頭的引數:就可以實現JSON資料的跨域傳輸啦~

package com.minstone
class CorsFilters {   
    def filters = {      
        all(controller:'*', action:'*') {          
            before = {
                response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"))
                response.setHeader("Access-Control-Allow-Credentials", "true")
                response.setHeader("P3P", "CP=CAO PSA OUR")
                if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
                    response.addHeader("Access-Control-Allow-Methods", "GET,TRACE,OPTIONS")
                    response.addHeader("Access-Control-Allow-Headers", "Content-Type,Origin,Accept")
                    response.addHeader("Access-Control-Max-Age", "120") }}
            after = { Map model -> }
            afterView = { Exception e -> }}}



相關文章