go语言操作MySQL第三方库 老男孩go培训

    /    2019-06-28

更多内容请关注微信公众号:oldboygo


Go语言操作mysql除使用 github.com/go-sql-driver/mysql第三方开源的mysql库外还可以使用github.com/jinzhu/gorm包,GORM是使用Go语言开发的友好的ORM库。

安装

go get -u github.com/jinzhu/gorm

通用数据库接口sql.DB

*gorm.DB连接获取通用数据库接口*sql.DB

// 获取通用数据库对象`*sql.DB`以使用其函数
db.DB()

// Ping
db.DB().Ping()

连接池

db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)

复合主键

将多个字段设置为主键以启用复合主键

type Product struct {
    ID           string `gorm:"primary_key"`
    LanguageCode string `gorm:"primary_key"`
}

日志

Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误

// 启用Logger,显示详细日志
db.LogMode(true)

// 禁用日志记录器,不显示任何日志
db.LogMode(false)

// 调试单个操作,显示此操作的详细日志
db.Debug().Where("name = ?""jinzhu").First(&User{})

自定义日志

参考GORM的默认记录器如何自定义

https://github.com/jinzhu/gorm/blob/master/logger.go

db.SetLogger(gorm.Logger{revel.TRACE})
db.SetLogger(log.New(os.Stdout, "\r\n"0))

架构

Gorm使用可链接的API,*gorm.DB是链的桥梁,对于每个链API,它将创建一个新的关系。

db, err := gorm.Open("postgres""user=gorm dbname=gorm sslmode=disable")

// 创建新关系
db = db.Where("name = ?""jinzhu")

// 过滤更多
if SomeCondition {
    db = db.Where("age = ?"20)
else {
    db = db.Where("age = ?"30)
}
if YetAnotherCondition {
    db = db.Where("active = ?"1)
}

当我们开始执行任何操作时,GORM将基于当前的*gorm.DB创建一个新的*gorm.Scope实例

// 执行查询操作
db.First(&user)

并且基于当前操作的类型,它将调用注册的creating,updating,querying,deletingrow_querying回调来运行操作。


(2)

分享至