在接口的方法上的注释,Gen将解析它们并为应用的结构生成查询 API。
Gen 提供一些有条件的 SQL 动态支持,让我们从三个方面介绍它们:
- 返回结果
- 模板占位符
- 模板表达式
返回结果
Gen 允许配置返回的结果类型,它支持以下四种基本类型。
Option | Description |
---|---|
gen.T | returns struct |
gen.M | returns map |
gen.RowsAffected | returns rowsAffected returned from database (type: int64) |
error | returns error if any |
e.g:
type Querier interface { |
这些基本类型可以与其他符号,例如 * <code>[]
, 例如:
type Querier interface { |
模板占位符
Gen 提供了一些占位符来生成动态且安全的 SQL
Name | Description |
---|---|
@@table |
被转义并引用的表名 |
@@<name> |
被转义并引用为表或列名称的参数名 |
@<name> |
用于SQL查询语句参数的参数名 |
e.g:
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,用下例说明
用法: