1 Star 0 Fork 0

megnhao / restful-api-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
dao.go 2.50 KB
一键复制 编辑 原始数据 按行查看 历史
megnhao 提交于 2022-05-14 09:40 . 添加更新的逻辑
package impl
import (
"context"
"database/sql"
"fmt"
"gitee.com/megnhao/restful-api-demo/apps/host"
)
//完成对象和sql之间的转换
func (i *HostServiceimpl) save(ctx context.Context, ins *host.Host) error {
var (
err error
)
//默认值填充
ins.InjectDefault()
//保存数据
// 把数据入库到 resource表和host表
// 一次需要往2个表录入数据, 我们需要2个操作 要么都成功,要么都失败, 事务的逻辑
tx, err := i.db.BeginTx(ctx, nil)
if err != nil {
return fmt.Errorf("start tx error,%s", err)
}
//处理事务提交方式
//1.无错误,侧commit事务
//2.有报错则Rollback
defer func() {
if err != nil {
if err := tx.Rollback(); err != nil {
i.l.Error("rooback error,%s", err)
}
} else {
if err := tx.Commit(); err != nil {
i.l.Error("commit error,%s", err)
}
}
}()
//插入Resource数据
rstmt, err := tx.Prepare(InsertResourceSQL)
if err != nil {
return err
}
defer rstmt.Close()
_, err = rstmt.Exec(
ins.Id, ins.Vendor, ins.Region, ins.CreateAt, ins.ExpireAt, ins.Type,
ins.Name, ins.Description, ins.Status, ins.UpdateAt, ins.SyncAt, ins.Account, ins.PublicIP,
ins.PrivateIP,
)
if err != nil {
return err
}
//插入Describe 数据
dstmt, err := tx.Prepare(InsertDescribeSQL)
if err != nil {
return err
}
defer dstmt.Close()
_, err = dstmt.Exec(
ins.Id, ins.CPU, ins.Memory, ins.GPUAmount, ins.GPUSpec,
ins.OSType, ins.OSName, ins.SerialNumber,
)
return nil
}
func (i *HostServiceimpl) update(ctx context.Context, ins *host.Host) error {
var (
err error
)
//开启一个事务tx
tx, err := i.db.BeginTx(ctx, nil)
if err != nil {
return err
}
// 通过Defer处理事务提交方式
// 1. 无报错,则Commit 事务
// 2. 有报错, 则Rollback 事务
defer func() {
if err != nil {
if err := tx.Rollback(); err != nil {
i.l.Error("rollback error ,%s", err)
}
} else {
if err := tx.Commit(); err != nil {
i.l.Error("commit error %s", err)
}
}
}()
var (
resStmt, hostStmt *sql.Stmt
)
//更新Resource表
resStmt, err = tx.PrepareContext(ctx, updateResourceSQL)
if err != nil {
return err
}
_, err = resStmt.ExecContext(ctx, ins.Vendor, ins.Region, ins.ExpireAt, ins.Type, ins.Name, ins.Description, ins.Id)
if err != nil {
return err
}
//更新Host表
hostStmt, err = tx.PrepareContext(ctx, updateHostSQL)
if err != nil {
return err
}
_, err = hostStmt.ExecContext(ctx, ins.CPU, ins.Memory, ins.Id)
if err != nil {
return err
}
return nil
}
Go
1
https://gitee.com/megnhao/restful-api-demo.git
git@gitee.com:megnhao/restful-api-demo.git
megnhao
restful-api-demo
restful-api-demo
e06e71524eb4

搜索帮助

53164aa7 5694891 3bd8fe86 5694891