mysqldb库的事务支持也是类似于Laravel,但需要创建一个新的Model对象出来
下面是mysqldb库在实际项目中的应用
1,项目目录结构
其中bootstrap作为整个项目的初始化入口,app.go里面是所有全局初始化对象,其中就包括ORM对象(我这里变量名为:DB)的生成
var (
DB *mysqldb.Adapter
dberr error
)
func init() {
DB, dberr = mysqldb.New(
&mysqldb.Options{
User: "root",
Password: "root",
Host: "127.0.0.1",
Port: 3306,
Database: "dbname",
Charset: "utf8",
MaxIdleConns: 5,
MaxOpenConns: 5,
Debug: true,
}
)
if dberr != nil {
log.Panic("Mysql connect error: ", dberr)
}
DB.SetLogLevel(Mysqldb.LOG_DEBUG)
}
2,在scheduleService/app/models项目目录中(scheduleService是我的项目目录名称),创建表对应的model文件Article.go
Article.go的源代码如下:
package models
import (
. "scheduleService/bootstrap"
)
type Article struct {
Id int64 `json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Cid int `json:"cid"`
CreateDate string `json:"create_date"`
}
func (a *Article) Name() string {
return "article"
}
func (a *Article) Insert(article *Article) (int64, error) {
return DB.Table(a.Name()).Insert(article)
}
func (a *Article) Delete(ids []int64) (int64, error) {
return DB.Table(a.Name()).WhereIn("id", ids).Delete()
}
func (a *Article) Update(data map[string]interface{}) (int64, error) {
return DB.Table(a.Name()).SetPk("id").Update(data)
}
func (a *Article) List(cid, page, size int) ([]*Article, error) {
offset := (page - 1) * size
res := make([]*Article, 0)
err := DB.Table(a.Name()).Where("cid", cid).Where("title", "!=", "").Limit(offset, size).Find(&res)
return res, err
}
func (a *Article) Number() (int64, error) {
return DB.Table(a.Name()).Count()
}
3,事务操作,删除文章分类的同时删除该分类id所属的所有文章
func (a *Article) DeleteCategory(id int64) (bool, error) {
//Mysqldb使用事务时,需要创建一个新的Model对象,不能我们在项目初始化时创建全局的DB
session := DB.NewModel()
session.Begin()
// 删除分类表category中分类记录
_, err := session.Table("category").Where("id", id).Delete()
if err != nil {
session.Rollback()
return false, err
}
// 删除文章表article中cid对应的记录
_, err = session.Table("article").Where("cid", id).Delete()
if err != nil {
session.Rollback()
return false, err
}
session.Commit()
return true, nil
}
总体来说,Mysqldb库使用还是很简单的,完全可以担当得起快捷开发的需求,如果写过PHP的同学用起来会更加流畅,操作和Laravel框架很相似。