全部產品
Search
文件中心

DataWorks:指令碼模式:進階SQL(Mybatis文法)樣本

更新時間:Jun 19, 2024

資料服務支援通過指令碼模式來產生API,指令碼模式可使用基礎SQL或進階SQL文法編寫查詢邏輯。其中,進階SQL涵蓋了Mybatis文法的常見標籤類型(例如,if、choose、when、otherwise、trim、foreach、where),您可以藉助標籤文法來靈活實現空值校正、多值遍曆、動態查表、動態排序及彙總等複雜查詢邏輯。

使用說明

本文主要為您介紹使用指令碼模式產生API時,通過進階SQL編寫查詢邏輯的相關樣本,以及SQL代碼與產生API介面的請求參數返回參數的對應關係。為避免實際使用時運行失敗,請將查詢的表、欄位、相關查詢條件替換為您實際使用的內容。

說明

產生API介面中,請求參數和返回參數的樣本值為非必填。若您每次測試API,均使用同一套值來測試,則填寫樣本值後,測試API時會自動載入樣本值作為請求參數的輸入值,避免每次重新輸入。樣本值僅用於參考。

通過指令碼模式產生API的相關操作,請參見通過指令碼模式產生API

本文提供的進階SQL(Mybatis文法)情境樣本如下:

樣本1:通過條件控制返回結果按照不同的表欄位進行排序

樣本使用動態SQL查詢語句,通過var的值決定使用哪種排序方式。

  • var的值為1時,使用order by col01對結果進行排序。

  • var的值為2時,使用order by col02對結果進行排序。

  • var的值為3時,使用order by col01,col02對結果進行排序。

  • var的值為4時,使用order by col02,col01對結果進行排序。

SQL程式碼範例如下。

重要

使用時,具體的表名、欄位及其他條件,請根據實際情況進行替換和補充。

select col01,col02
from table_name  
<choose>
    <when test='var == 1'>
    order by col01
    </when>
    <when test='var == 2'>
    order by col02
    </when>
    <when test='var == 3'>
    order by col01,col02
    </when>
    <when test='var == 4'>
    order by col02,col01
    </when>
</choose>

使用指令碼模式產生API的介面參數配置樣本如下。您可根據需要替換樣本值。image.png

  • 請求參數:

    參數名稱

    參數類型

    參數位置

    是否必填

    樣本值

    預設值

    描述

    var

    INT

    QUERY

    1

    1

    排序方式

  • 返回參數:

    參數名稱

    參數類型

    樣本值

    col01

    STRING

    shortname

    col02

    STRING

    name

樣本2:通過條件控制查詢不同的資料表

樣本使用動態SQL查詢語句,通過var的不同取值控制查詢不同的表,並返回col01欄位的資料。

  • var的值為1時,查詢table_name01表的col01欄位。

  • var的值為2時,查詢table_name02表的col01欄位。

SQL程式碼範例如下。

重要

使用時,具體的表名、欄位及其他條件,請根據實際情況進行替換和補充。

select col01
from
<choose>
 <when test='var == 1'>
 table_name01
 </when>
 <when test='var == 2'>
 table_name02
 </when>
</choose>

使用指令碼模式產生API的介面參數配置樣本如下。您可根據需要替換樣本值。image.png

  • 請求參數:

    參數名稱

    參數類型

    參數位置

    是否必填

    樣本值

    預設值

    var

    INT

    QUERY

    1

    1

  • 返回參數:

    參數名稱

    參數類型

    樣本值

    col01

    STRING

    123

樣本3:通過判斷欄位值是否為空白來控制where查詢條件是否保留

樣本根據list集合中的area值,動態產生查詢條件,並根據條件查詢資料。

list不為null,則會產生一個包含area欄位值的查詢條件,並遍曆list集合,將集合中的每個元素按照指定方式拼接,返回area_idareaamount欄位的資料。

SQL程式碼範例如下。

重要

使用時,具體的表名、欄位及其他條件,請根據實際情況進行替換和補充。

SELECT area_id, area, amount
FROM table_name
<where>
	<if test='list!=null'>
	area in
		<foreach collection="list" open="(" close=")" separator="," item="area">
		${area}
		</foreach>
	</if>
</where>

使用指令碼模式產生API的介面參數配置樣本如下。您可根據需要替換樣本值。image.png

  • 請求參數:

    參數名稱

    參數類型

    參數位置

    是否必填

    樣本值

    預設值

    list

    STRING_LIST

    QUERY

    北京市,杭州市

    北京市

  • 返回參數:

    參數名稱

    參數類型

    樣本值

    area_id

    STRING

    123120

    area

    STRING

    北京市

    amount

    STRING

    50