アノテーションはインターフェースのメソッドに記述するコメントです。Genはそれらを解析し、適用された構造体に対するクエリAPIを生成します。
Genは動的な条件付きSQLをサポートするためのいくつかの規則を提供しています。それらを3つの側面から紹介します。
- 結果の返却
- テンプレートプレースホルダー
- テンプレート式
結果の返却
Genでは、返される結果の型を設定できます。現在、以下の4つの基本型がサポートされています。
オプション | 説明 |
---|---|
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
set
for
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{ |