方法操作用于原生SQL
执行,相对链式操作更偏底层操作一些,在ORM
链式操作执行不了太过于复杂的SQL
操作时,可以交给方法操作来处理。
接口文档: https://pkg.go.dev/github.com/gogf/gf/v2/database/gdb
常用方法:
本文档的方法列表可能滞后于于代码,详细的方法列表请查看接口文档,以下方法仅供参考。
// SQL操作方法,返回原生的标准库sql对象
Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
Prepare(ctx context.Context, query string) (*sql.Stmt, error)
// 数据表记录查询:
// 查询单条记录、查询多条记录、获取记录对象、查询单个字段值(链式操作同理)
GetAll(ctx context.Context, sql string, args ...interface{}) (Result, error)
GetOne(ctx context.Context, sql string, args ...interface{}) (Record, error)
GetValue(ctx context.Context, sql string, args ...interface{}) (Value, error)
GetArray(ctx context.Context, sql string, args ...interface{}) ([]Value, error)
GetCount(ctx context.Context, sql string, args ...interface{}) (int, error)
GetScan(ctx context.Context, objPointer interface{}, sql string, args ...interface{}) error
// 数据单条操作
Insert(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
Replace(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
Save(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
// 数据修改/删除
Update(ctx context.Context, table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
Delete(ctx context.Context, table string, condition interface{}, args ...interface{}) (sql.Result, error)
简要说明:
Query
是原始的数据查询方法,返回的是原生的标准库的结果集对象,需要自行解析。推荐使用Get*
方法,会对结果自动做解析。
Exec
方法用于写入/更新的SQL
的操作。
Get*
系列查询方法。
Insert/Replace/Save
方法中的data
参数支持的数据类型为:string/map/slice/struct/*struct
,当传递为slice
类型时,自动识别为批量操作,此时batch
参数有效。// 获取默认配置的数据库对象(配置名称为"default")
db := g.DB()
// 获取配置分组名称为"user-center"的数据库对象
db := g.DB("user-center")
// 使用原生单例管理方法获取数据库对象单例
db, err := gdb.Instance()
db, err := gdb.Instance("user-center")
// 注意不用的时候不需要使用Close方法关闭数据库连接(并且gdb也没有提供Close方法),
// 数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭
r, err := db.Insert(ctx, "user", gdb.Map {
"name": "john",
})
list, err := db.GetAll(ctx, "select * from user limit 2")
list, err := db.GetAll(ctx, "select * from user where age > ? and name like ?", g.Slice{18, "%john%"})
list, err := db.GetAll(ctx, "select * from user where status=?", g.Slice{1})
one, err := db.GetOne(ctx, "select * from user limit 2")
one, err := db.GetOne(ctx, "select * from user where uid=1000")
one, err := db.GetOne(ctx, "select * from user where uid=?", 1000)
one, err := db.GetOne(ctx, "select * from user where uid=?", g.Slice{1000})
r, err := db.Save(ctx, "user", gdb.Map {
"uid" : 1,
"name" : "john",
})
其中batch
参数用于指定批量操作中分批写入条数数量(默认是10
)。
_, err := db.Insert(ctx, "user", gdb.List {
{"name": "john_1"},
{"name": "john_2"},
{"name": "john_3"},
{"name": "john_4"},
}, 10)
// db.Update/db.Delete 同理
// UPDATE `user` SET `name`="john" WHERE `uid`=10000
r, err := db.Update(ctx, "user", gdb.Map {"name": "john"}, "uid=?", 10000)
// UPDATE `user` SET `name`="john" WHERE `uid`=10000
r, err := db.Update(ctx, "user", "name="john"", "uid=10000")
// UPDATE `user` SET `name`="john" WHERE `uid`=10000
r, err := db.Update(ctx, "user", "name=?", "uid=?", "john", 10000)
注意,参数域支持并建议使用预处理模式(使用?
占位符)进行输入,避免SQL
注入风险。
Do方法我们最常用的是Do方法,执行同步指令,通过向RedisServer发送对应的RedisAPI命令,来使用RedisServer的服...
基本介绍资源管理是指可以将任意文件/目录打包为Golang源码文件,并且编译到可执行文件中,随着可执行文件发布。资源文件在程序...
以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档:https://pkg.go.dev/github.com/gogf/gf/v2...
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。比如,在一个博客应用中,你可能会创建如下几个视图:博客首...
ASP.NET Calendar SelectWeekText 属性 Calendar 控件定义和用法 SelectWeekText 属性用于规定在日历中为选取整个周而显示的文本...
配置一个 ASP.NET 应用程序的行为是由以下两个配置文件中的不同设置决定的:machine.config web.configmachine.config 文件包含...