注解是接口方法的注释,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
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{ |