导入包
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)
连接mysql
db,err:=gorm.Open("mysql","account:pwd@tcp(host:port)/db?charset=utf8")
禁用复数形式
db.SingularTable(true)
为表名添加前缀
gorm.DefaultTableNameHandler= func(db *gorm.DB, defaultTableName string) string {
return "test_" +defaultTableName
}
设置打印日志
db.LogMode(true)
定义回调函数
例如
type Project struct {
ID int `gorm:"primary_key"`
Name string `gorm:"type:varchar(64);not null"`
Title string `gorm:"type:varchar(64);unique;not null"`
Runtime string `gorm:"type:varchar(64);"`
Type int `gorm:"default:0;"`
LastTime time.Time
Dingmachince string `gorm:"type:varchar(255);"`
Filename string `gorm:"type:varchar(255);"`
Ossaddress string `gorm:"size:512"`
UpdateTime time.Time
CreateTime time.Time
IsDelete int `gorm:"default:0;not null"`
Desc string `gorm:"type:varchar(255);"`
Codeinfo string `gorm:"type:longText"`
Ossfilename string `gorm:"type:varchar(64);"`
}
当创建、修改对象时CreateTime 和UpdateTime 自动更新
func (t *Project) AfterCreate( scope * gorm.Scope) {
fmt.Println("AfterCreate回调函数")
return
}
func (t *Project) BeforeCreate( scope * gorm.Scope) {
fmt.Println("BeforeCreate回调函数")
if !scope.HasError() {
now := gorm.NowFunc()
if createdAtField, ok := scope.FieldByName("CreateTime"); ok {
if createdAtField.IsBlank {
createdAtField.Set(now)
}
}
if updatedAtField, ok := scope.FieldByName("UpdateTime"); ok {
if updatedAtField.IsBlank {
updatedAtField.Set(now)
}
}
}
return
}
func (t *Project) AfterSave( scope * gorm.Scope) {
fmt.Println("AfterSave回调函数")
return
}
func (t *Project) BeforeSave( scope * gorm.Scope) {
fmt.Println("BeforeSave回调函数")
return
}
func (t *Project) BeforeUpdate( scope * gorm.Scope) {
fmt.Println("BeforeUpdate回调函数")
if _, ok := scope.Get("gorm:update_column"); !ok {
scope.SetColumn("UpdateTime", gorm.NowFunc())
}
return
}
func (t *Project) AfterUpdate( scope * gorm.Scope) {
fmt.Println("AfterUpdate回调函数")
}
func createNew(db *gorm.DB) {
title:=GetRandomString(6)
filename:=GetRandomString(5)+".py"
ding:=GetRandomString(10)
name:=GetRandomString(6)
var project Project
project=Project{Name:name,Title:title,Runtime:"11 * * * *",Dingmachince:ding,Filename:filename}
//a:=db.NewRecord(project)
//fmt.Println(a)
db.Create(&project)
}
创建表时,添加后缀
db.Set("grom:table_options","ENGINE=InnoDB")
添加一个对象和更新一个对象
自定义回调函数
db.Callback().Create().Register("gorm:before_create1", beforeCreate1)
设置最大连接数和最大闲置数
默认0表示不限制
db.DB().SetMaxIdleConns(2000)
db.DB().SetMaxOpenConns(1000)