Go操作Mysql的ORM之mysqldb在项目应用中的CRUD操作和事务操作

11 篇文章 1 订阅

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框架很相似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值