iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Modern Web

來架個網站吧系列 第 15

來架個網站吧-15.網站開發-5-MVC-2-Domain

  • 分享至 

  • xImage
  •  
tags: 來架個網站吧 Grails

我是目錄


昨天完成新增畫面之後,接下來就是建立 domain 啦!在Grails設計框架之中,原則上資料酷的一張table是對到一個 Domain Class,本次要新增的table 在篇中: 來架個網站吧-10.資料規劃,就有提到,於是我在這邊就不多做闡述。新增完成 Table 之後,接下來是新增幾筆測試資料。如下:

INSERT INTO public.dict
( word, radical, total_strokes, out_strokes, mpc, explanation)
VALUES('一', '一', 1, 0, '一', 
'(1) 自ㄗˋ然ㄖㄢˊ數ㄕㄨˋ的˙ㄉㄜ第ㄉㄧˋ一ㄧ位ㄨㄟˋ。大ㄉㄚˋ寫ㄒㄧㄝˇ作ㄗㄨㄛˋ「壹ㄧ」,阿ㄚ拉ㄌㄚ伯ㄅㄛˊ數ㄕㄨˋ字ㄗˋ作ㄗㄨㄛˋ「1」。
(2)單ㄉㄢ個˙ㄍㄜ、不ㄅㄨˊ是ㄕˋ多ㄉㄨㄛ數ㄕㄨˋ的˙ㄉㄜ。如ㄖㄨˊ:「一ㄧˊ個˙ㄍㄜ」、「一ㄧˋ張ㄓㄤ紙ㄓˇ」。
(3) 相ㄒㄧㄤ同ㄊㄨㄥˊ、一ㄧˊ致ㄓˋ。如ㄖㄨˊ:「一ㄧˋ模ㄇㄛˊ一ㄧˊ樣ㄧㄤˋ」、「大ㄉㄚˋ小ㄒㄧㄠˇ不ㄅㄨˋ一ㄧ」。
(4) 專ㄓㄨㄢ注ㄓㄨˋ、純ㄔㄨㄣˊ正ㄓㄥˋ。如ㄖㄨˊ:「一ㄧˋ心ㄒㄧㄣ一ㄧˊ意ㄧˋ」、「用ㄩㄥˋ情ㄑㄧㄥˊ專ㄓㄨㄢ一ㄧ」。
(5)全ㄑㄩㄢˊ、整ㄓㄥˇ。如ㄖㄨˊ:「一ㄧˋ身ㄕㄣ臭ㄔㄡˋ汗ㄏㄢˋ」、「一ㄧˋ生ㄕㄥ一ㄧˊ世ㄕˋ」。
(6) 每ㄇㄟˇ。如ㄖㄨˊ:「一ㄧˋ班ㄅㄢ四ㄙˋ十ㄕˊ人ㄖㄣˊ」、「一ㄧˊ頁ㄧㄝˋ六ㄌㄧㄡˋ百ㄅㄞˇ字ㄗˋ」。
(7) 才ㄘㄞˊ、剛ㄍㄤ剛ㄍㄤ。如ㄖㄨˊ:「一ㄧˋ聽ㄊㄧㄥ就ㄐㄧㄡˋ懂ㄉㄨㄥˇ」、「天ㄊㄧㄢ一ㄧˊ亮ㄌㄧㄤˋ,他ㄊㄚ便ㄅㄧㄢˋ起ㄑㄧˇ床ㄔㄨㄤˊ。」
(8)放ㄈㄤˋ在ㄗㄞˋ兩ㄌㄧㄤˇ重ㄔㄨㄥˊ疊ㄉㄧㄝˊ的˙ㄉㄜ動ㄉㄨㄥˋ詞ㄘˊ之ㄓ間ㄐㄧㄢ,表ㄅㄧㄠˇ示ㄕˋ短ㄉㄨㄢˇ暫ㄓㄢˋ或ㄏㄨㄛˋ略ㄌㄩㄝˋ微ㄨㄟˊ嘗ㄔㄤˊ試ㄕˋ的˙ㄉㄜ意ㄧˋ思˙ㄙ。如ㄖㄨˊ:「動ㄉㄨㄥˋ一ㄧ動ㄉㄨㄥˋ」、「問ㄨㄣˋ一ㄧ問ㄨㄣˋ」、「聞ㄨㄣˊ一ㄧ聞ㄨㄣˊ」。
(9) 另ㄌㄧㄥˋ外ㄨㄞˋ的˙ㄉㄜ。如ㄖㄨˊ:「蟬ㄔㄢˊ,一ㄧˋ名ㄇㄧㄥˊ知ㄓ了ㄌㄧㄠˇ。」
(10)一ㄧˊ旦ㄉㄢˋ。表ㄅㄧㄠˇ示ㄕˋ假ㄐㄧㄚˇ設ㄕㄜˋ的˙ㄉㄜ語ㄩˇ氣ㄑㄧˋ。如ㄖㄨˊ:「一ㄧˋ失ㄕ足ㄗㄨˊ成ㄔㄥˊ千ㄑㄧㄢ古ㄍㄨˇ恨ㄏㄣˋ」。'
);

INSERT INTO public.dict
( word, radical, total_strokes, out_strokes, mpc, explanation)
VALUES('團', '囗', 14, 11, 'ㄊㄨㄢˊ', 
'(1)圓ㄩㄢˊ形ㄒㄧㄥˊ的˙ㄉㄜ。如ㄖㄨˊ:「團ㄊㄨㄢˊ扇ㄕㄢˋ」。
(2)集ㄐㄧˊ結ㄐㄧㄝˊ成ㄔㄥˊ球ㄑㄧㄡˊ狀ㄓㄨㄤˋ的˙ㄉㄜ事ㄕˋ物ㄨˋ。如ㄖㄨˊ:「麵ㄇㄧㄢˋ團ㄊㄨㄢˊ」、「紙ㄓˇ團ㄊㄨㄢˊ」、「肉ㄖㄡˋ團ㄊㄨㄢˊ」。
(3)聚ㄐㄩˋ集ㄐㄧˊ、凝ㄋㄧㄥˊ結ㄐㄧㄝˊ。如ㄖㄨˊ:「團ㄊㄨㄢˊ拜ㄅㄞˋ」、「團ㄊㄨㄢˊ購ㄍㄡˋ」、「團ㄊㄨㄢˊ結ㄐㄧㄝˊ」、「團ㄊㄨㄢˊ聚ㄐㄩˋ」、「團ㄊㄨㄢˊ圓ㄩㄢˊ」、「團ㄊㄨㄢˊ團ㄊㄨㄢˊ露ㄌㄨˋ珠ㄓㄨ」。
(4)同ㄊㄨㄥˊ類ㄌㄟˋ性ㄒㄧㄥˋ質ㄓˊ的˙ㄉㄜ物ㄨˋ體ㄊㄧˇ大ㄉㄚˋ量ㄌㄧㄤˋ結ㄐㄧㄝˊ集ㄐㄧˊ的˙ㄉㄜ聚ㄐㄩˋ合ㄏㄜˊ物ㄨˋ。如ㄖㄨˊ:「星ㄒㄧㄥ團ㄊㄨㄢˊ」、「疑ㄧˊ團ㄊㄨㄢˊ」、「冷ㄌㄥˇ氣ㄑㄧˋ團ㄊㄨㄢˊ」。
(5)因ㄧㄣ特ㄊㄜˋ定ㄉㄧㄥˋ性ㄒㄧㄥˋ質ㄓˊ或ㄏㄨㄛˋ共ㄍㄨㄥˋ同ㄊㄨㄥˊ目ㄇㄨˋ的ㄉㄧˋ而ㄦˊ組ㄗㄨˇ織ㄓ聚ㄐㄩˋ集ㄐㄧˊ的˙ㄉㄜ群ㄑㄩㄣˊ體ㄊㄧˇ。如ㄖㄨˊ:「團ㄊㄨㄢˊ體ㄊㄧˇ」、「社ㄕㄜˋ團ㄊㄨㄢˊ」、「馬ㄇㄚˇ戲ㄒㄧˋ團ㄊㄨㄢˊ」、「旅ㄌㄩˇ行ㄒㄧㄥˊ團ㄊㄨㄢˊ」、「合ㄏㄜˊ唱ㄔㄤˋ團ㄊㄨㄢˊ」。
(6)形ㄒㄧㄥˊ容ㄖㄨㄥˊ轉ㄓㄨㄢˇ圈ㄑㄩㄢ的˙ㄉㄜ樣ㄧㄤˋ子ㄗˇ。如ㄖㄨˊ:「團ㄊㄨㄢˊ團ㄊㄨㄢˊ轉ㄓㄨㄢˋ」、「團ㄊㄨㄢˊ團ㄊㄨㄢˊ打ㄉㄚˇ轉ㄓㄨㄢˋ」。
(7)軍ㄐㄩㄣ隊ㄉㄨㄟˋ的˙ㄉㄜ編ㄅㄧㄢ制ㄓˋ之ㄓ一ㄧ。如ㄖㄨˊ:「軍ㄐㄩㄣ團ㄊㄨㄢˊ」。
(8)量ㄌㄧㄤˋ詞ㄘˊ。A>用ㄩㄥˋ於ㄩˊ計ㄐㄧˋ算ㄙㄨㄢˋ團ㄊㄨㄢˊ狀ㄓㄨㄤˋ物ㄨˋ的˙ㄉㄜ單ㄉㄢ位ㄨㄟˋ。如ㄖㄨˊ:「一ㄧˋ團ㄊㄨㄢˊ毛ㄇㄠˊ線ㄒㄧㄢˋ」、「兩ㄌㄧㄤˇ團ㄊㄨㄢˊ泥ㄋㄧˊ巴ㄅㄚ」。B>用ㄩㄥˋ於ㄩˊ計ㄐㄧˋ算ㄙㄨㄢˋ成ㄔㄥˊ團ㄊㄨㄢˊ狀ㄓㄨㄤˋ態ㄊㄞˋ的˙ㄉㄜ單ㄉㄢ位ㄨㄟˋ。「一ㄧˋ團ㄊㄨㄢˊ亂ㄌㄨㄢˋ」、「一ㄧˋ團ㄊㄨㄢˊ和ㄏㄜˊ氣ㄑㄧˋ」、「擠ㄐㄧˇ成ㄔㄥˊ一ㄧˋ團ㄊㄨㄢˊ」。'
);

INSERT INTO public.dict
( word, radical, total_strokes, out_strokes, mpc, explanation)
VALUES('圖', '囗',14, 11, 'ㄊㄨˊ', 
'(1) 由ㄧㄡˊ各ㄍㄜˋ種ㄓㄨㄥˇ形ㄒㄧㄥˊ狀ㄓㄨㄤˋ、線ㄒㄧㄢˋ條ㄊㄧㄠˊ、色ㄙㄜˋ彩ㄘㄞˇ所ㄙㄨㄛˇ組ㄗㄨˇ成ㄔㄥˊ的˙ㄉㄜ畫ㄏㄨㄚˋ面ㄇㄧㄢˋ。如ㄖㄨˊ:「地ㄉㄧˋ圖ㄊㄨˊ」、「圖ㄊㄨˊ畫ㄏㄨㄚˋ」、「圖ㄊㄨˊ片ㄆㄧㄢˋ」、「插ㄔㄚ圖ㄊㄨˊ」、「圖ㄊㄨˊ表ㄅㄧㄠˇ」。
(2) 謀ㄇㄡˊ取ㄑㄩˇ、希ㄒㄧ望ㄨㄤˋ得ㄉㄜˊ到ㄉㄠˋ。如ㄖㄨˊ:「圖ㄊㄨˊ謀ㄇㄡˊ」、「企ㄑㄧˋ圖ㄊㄨˊ」、「唯ㄨㄟˊ利ㄌㄧˋ是ㄕˋ圖ㄊㄨˊ」、「貪ㄊㄢ圖ㄊㄨˊ名ㄇㄧㄥˊ利ㄌㄧˋ」。
(3) 計ㄐㄧˋ謀ㄇㄡˊ、計ㄐㄧˋ策ㄘㄜˋ。如ㄖㄨˊ:「良ㄌㄧㄤˊ圖ㄊㄨˊ」、「鴻ㄏㄨㄥˊ圖ㄊㄨˊ大ㄉㄚˋ展ㄓㄢˇ」。'
);

資料庫完成系統運作的基礎資料之後,接下來是新增 Domain Class。在 intellij idea 新增方式如下圖。

day-15-add-domain-1

  1. domain/dict資料夾中按下右鍵。
  2. 選擇新增Grails Domain Class

day-15-add-domain-2

  1. 輸入要新增的gsp檔案名稱。

這邊簡單說明一下 Grails Domain Class 的內容框架。

基本上 Grails Domain Class 是一個 JavaBean 的內容演伸出來的,在這個框架基礎上有兩個重要的項目: mappingconstraints

  • mapping: 主要描述 變數 對應到資料庫中的資歷表欄位。如果在 Domain Class 中沒有新增 static mapping ,預設是 駝峰命名規則 對應 下滑線命名規則
  • constraints: 主要描述 變數的內容限制。如:長度(maxSize:4)、常見文字規則(url,email)等。預設都是 nullable:false, blank: false

程式碼內容如下

  • grails-app/domain/dict/Dict.groovy
package dict

class Dict {

    Date dateCreated = new Date()
    Date lastUpdated
    String word
    String radical
    int totalStrokes
    int outStrokes
    String mpc
    String explanation

    static mapping = {
        table 'dict'
        comment: '字典'
        version true

        id              column: 'id'
        dateCreated     column: 'date_created',   comment: '建檔時間'
        lastUpdated     column: 'last_updated',   comment: '最後異動時間'
        word            column: 'word',           comment: '單字'
        radical         column: 'radical',        comment: '部首'
        totalStrokes    column: 'total_strokes',  comment: '總筆畫數'
        outStrokes      column: 'out_strokes',    comment: '部首外筆畫'
        mpc             column: 'mpc',            comment: '注音'
        explanation     column: 'explanation',    comment: '解釋',        type: 'text'

    }

    static constraints = {
        dateCreated			(nullable:false, blank: false)
        lastUpdated			(nullable:false, blank: false)
        word			    (nullable:false, blank: false, maxSize: 1)
        radical			    (nullable:false, blank: false, maxSize: 1)
        totalStrokes		(nullable:false, blank: false)
        outStrokes			(nullable:false, blank: false)
        mpc			        (nullable:false, blank: false, maxSize: 4)
        explanation			(nullable:false, blank: false)
    }
}

參考資料

openhome-定義類別

Domain Class Usage

Constraints Usage


上一篇
來架個網站吧-14.網站開發-4-MVC-1-view
下一篇
來架個網站吧-16.網站開發-6-MVC-3-Service
系列文
來架個網站吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言