iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Modern Web

來架個網站吧系列 第 16

來架個網站吧-16.網站開發-6-MVC-3-Service

  • 分享至 

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

我是目錄


新增 Service

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

day-16-add-Service-1

程式說明

在 Service 的文件中主要是處理資料流程,一般API並不會直接觸及Service。在這邊我比較請向處理單一 Domain Class 的資料處理,也就是說有一張 Domain 就會對一個 Service

Service 通常會有事物流程 @Transactional,在執行 新增、修改、刪除 時還蠻常用到。

而在程式中 GrailsParameterMap ,是前端表單傳入的數值,繼承自 java.util.Map,回傳的資料如下:

[searchWord:一, controller:dict, action:filter]

查詢的方式,這邊我是用 createCriteria 來操作查詢。完成執行查詢之後,將資料轉成 bootstrap table 所需要的資料格式,如下:

{
  "total": 1,
  "rows": [
    {
      "id": 1,
      "word": "一",
      "radical": "一",
      "totalStrokes": 1,
      "outStrokes": 0,
      "mpc": "一",
      "explanation": "...."
    }
  ]
}
  • grails-app/services/dict/DictService.groovy
package dict

import grails.gorm.transactions.Transactional
import grails.web.servlet.mvc.GrailsParameterMap

@Transactional //事物
class DictService {

  LinkedHashMap filter(GrailsParameterMap params) {
    LinkedHashMap result = [:]

    String word = params?.searchWord

    def dictL = Dict.createCriteria().list(params){
      if(word){
          eq("word",word)
      }
    }

    //將資料轉成 `bootstrap table` 所需要的資料格式
    result.total = dictL.totalCount
    result.rows = dictL.collect { it ->
      [
        id          : it?.id,
        word        : it?.word,
        radical     : it?.radical,
        totalStrokes: it?.totalStrokes,
        outStrokes  : it?.outStrokes,
        mpc         : it?.mpc,
        explanation : it?.explanation,
      ]
    }

    return result

  }
}

參考資料

Grials createCriteria


上一篇
來架個網站吧-15.網站開發-5-MVC-2-Domain
下一篇
來架個網站吧-17.網站開發-7-MVC-4-Controller
系列文
來架個網站吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言