在接口的方法上的注释,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/elsewheresetfor
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,用下例说明
用法: