一.需求分析
- 商品修改涉及到两个表的修改:tb_item和tb_item_desc的修改
- 本小节使用事务完成数据的修改
- 需要改写DBUtils.go中代码,改写后Dao层代码直接调用PrepareWithTx()函数,在Service层中开启事务,提交事务
二.代码演示
//数据库操作的三个对象
var (
db *sql.DB
stmt *sql.Stmt
rows *sql.Rows
tx *sql.Tx
)
//打开数据库连接,不要忘记导入驱动包
func OpenConnWithTx()(err error){
//此处为等号,否则创建局部变量
db,err=sql.Open("mysql","root:smallming@tcp(localhost:3306)/ego")
if err!=nil{
fmt.Println("连接失败",err)
return
}
//开启事务
tx,err=db.Begin()
if err!=nil{
fmt.Println(err)
return
}
return nil
}
//判断返回值是否大于1
func PrepareWithTx(sql string ,args ... interface{}) int{
result,err:=tx.Exec(sql,args...)
if err!=nil{
fmt.Println(err)
return -1
}
count,err:=result.RowsAffected()
if err!=nil{
fmt.Println(err)
return -1
}
return int(count)
}
//提交事务
func CloseConnWithTx(result bool){
if result{
tx.Commit()//提交事务
}else{
tx.Rollback()//回滚事务
}
if rows!=nil{
rows.Close()
}
if stmt!=nil{
stmt.Close()
}
if db!=nil{
db.Close()
}
}