註解是介面方法中的註解,Gen 會剖析它們並為套用的結構產生查詢 API。
Gen 提供一些慣例,以支援動態條件式 SQL,讓我們從三個面向來介紹它們
- 傳回結果
- 範本佔位符
- 範本運算式
傳回結果
Gen 允許設定傳回結果類型,目前支援下列四種基本類型
選項 | 說明 |
---|---|
gen.T | 傳回結構 |
gen.M | 傳回對應 |
gen.RowsAffected | 傳回資料庫傳回的受影響列數 (類型:int64) |
error | 傳回任何錯誤 (如有) |
例如
type Querier interface { |
這些基本類型可以與其他符號結合使用,例如 *
、[]
,例如
type Querier interface { |
範本佔位符
Gen 提供一些佔位符,以產生動態且安全的 SQL
名稱 | 說明 |
---|---|
@@table |
轉譯並加上引號的資料表名稱 |
@@<name> |
從參數中轉譯並加上引號的資料表/欄位名稱 |
@<name> |
從參數中取得 SQL 查詢參數 |
例如
type Filter interface { |
產生程式碼後,您可以在應用程式中像這樣使用它。
import "your_project/query" |
範本運算式
Gen 提供強大的運算式支援,以支援動態條件式 SQL,目前支援下列運算式
if/else
where
設定
迴圈
if/else
if/else
表達式允許將 golang 語法用作條件,它可以寫成
例如
type Querier interface { |
更複雜的案例
type Querier interface { |
如何使用
query.User.QueryWith(&User{Name: "zhangqiang"}) |
where
where
表達式讓您更容易為 SQL 查詢撰寫 WHERE
子句,以下是一個簡單的範例
type Querier interface { |
使用產生的程式碼,您可以像這樣使用
query.User.Query(10) |
以下是另一個複雜的案例,在這個案例中,您將學習 WHERE
子句只有在有任何子表達式相符時才會插入,並且它可以智慧地修剪 where
子句中的不必要的 and
、or
、xor
、,
。
type Querier interface { |
產生的程式碼可以使用像這樣
var ( |
set
set
表達式用於為 SQL 查詢產生 SET
子句,它會自動修剪不必要的 ,
,例如
// UPDATE @@table |
產生的程式碼可以使用像這樣
query.User.Update(User{Name: "jinzhu", Age: 18}, 10) |
for
for
表達式會反覆執行一個切片來產生 SQL,讓我們透過範例來說明
// SELECT * FROM @@table |
用法
query.User.Filter([]User{ |