1 Star 0 Fork 0

铁匠/daox

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
mutation.go 2.61 KB
一键复制 编辑 原始数据 按行查看 历史
铁匠 提交于 2024-04-15 13:41 . Dev (#35)
package daox
import (
"context"
"github.com/jmoiron/sqlx"
"github.com/fengjx/daox/sqlbuilder"
)
// InsertRecord 插入记录
type InsertRecord struct {
TableName string `json:"table_name"` // 表名
Row map[string]any `json:"row"` // 行数据
}
// Insert 通用 insert 操作
func Insert(ctx context.Context, dbx *sqlx.DB, record InsertRecord, opts ...InsertOption) (int64, error) {
opt := &InsertOptions{}
for _, option := range opts {
option(opt)
}
if opt.DataWrapper != nil {
record.Row = opt.DataWrapper(ctx, record.Row)
}
if opt.FieldsFilter != nil {
for _, disableField := range opt.FieldsFilter(ctx) {
delete(record.Row, disableField)
}
}
inserter := sqlbuilder.NewInserter(record.TableName)
var columns []string
for col := range record.Row {
columns = append(columns, col)
}
inserter.Columns(columns...)
sql, err := inserter.NameSQL()
if err != nil {
return 0, err
}
result, err := dbx.NamedExecContext(ctx, sql, record.Row)
if err != nil {
return 0, err
}
return result.LastInsertId()
}
// UpdateRecord 更新记录
type UpdateRecord struct {
TableName string `json:"table_name"` // 表名
Row map[string]any `json:"row"` // 要修改的行记录
Conditions []Condition `json:"conditions"` // 条件字段
}
// Update 通用 update 操作
func Update(ctx context.Context, dbx *sqlx.DB, record UpdateRecord, opts ...UpdateOption) (int64, error) {
opt := &UpdateOptions{}
for _, option := range opts {
option(opt)
}
if opt.DataWrapper != nil {
record.Row = opt.DataWrapper(ctx, record.Row)
}
if opt.FieldsFilter != nil {
for _, disableField := range opt.FieldsFilter(ctx) {
delete(record.Row, disableField)
}
}
updater := sqlbuilder.NewUpdater(record.TableName)
for col, val := range record.Row {
updater.Set(col, val)
}
updater.Where(buildCondition(record.Conditions))
sql, args, err := updater.SQLArgs()
if err != nil {
return 0, err
}
result, err := dbx.ExecContext(ctx, sql, args...)
if err != nil {
return 0, err
}
return result.RowsAffected()
}
// DeleteRecord 删除记录
type DeleteRecord struct {
TableName string `json:"table_name"` // 表名
Conditions []Condition `json:"conditions"` // 条件字段
}
// Delete 通用 delete 操作
func Delete(ctx context.Context, dbx *sqlx.DB, record DeleteRecord) (int64, error) {
deleter := sqlbuilder.NewDeleter(record.TableName)
deleter.Where(buildCondition(record.Conditions))
sql, args, err := deleter.SQLArgs()
if err != nil {
return 0, err
}
result, err := dbx.ExecContext(ctx, sql, args...)
if err != nil {
return 0, err
}
return result.RowsAffected()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/fengjx/daox.git
[email protected]:fengjx/daox.git
fengjx
daox
daox
master

搜索帮助