gorm使用
数据库链接以及配置
dns设置与数据库链接
1 2 3 4 5 6 7 8 9 10 11 12 13
| dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true", username, password, host, port, database, charset ) db, err := gorm.Open(mysql.Open(dns), &gorm.Config{})
|
连接池的配置
1 2 3 4 5 6 7
| func (db *DB) SetConnMaxIdleTime(d time.Duration) func (db *DB) SetConnMaxLifetime(d time.Duration) func (db *DB) SetMaxIdleConns(n int) func (db *DB) SetMaxOpenConns(n int)
func (db *DB) Stats() DBStats
|
数据库操作
创建数据库表
想创建数据库,需要在go语言中创建一个相对应的结构体,以下是一个等效的例子
1 2 3 4 5
| type User struct { Name string `gorm:"type:varchar(20);not null"` Telephone string `gorm:"varchar(110);not null;unique"` }
|
1 2 3 4 5
| create table Users( id int AUTO_INCREMENT COMMENT PRIMARY KEY, name varchar(20) not null, telephone varchar(110) not null unique, )
|
当不指定主键时,gorm会默认名为 ID 的列作为主键,且默认的表名命名为XXXs。
可以在model中使用tag进行属性指定
1 2 3
| db.AutoMigrate(&User{}) db.Exec() db.Migrator()
|
对于表的操作
1 2 3
| db.HasTable("users") db.DropTable(&User{}) db.Model(&User{})
|
增加数据
1 2 3
| db.create(&newuser) db.save(&newuser) db.CreateInBatches(users, 100)
|
查询数据
类sql查询
1 2 3 4 5 6 7 8
| db.Select("name, COUNT(*) as total") db.Group("name") db.Order("total desc") db.Where("age > ?", 30) db.Table("users") db.Having("COUNT(*) > ?", 1) db.Join("inner join / left join...on...") db.Limit(n)
|
提取数据
1 2 3 4 5 6
| db.Find(&users) db.First(&user) db.First(&user,10) db.Last(&user) db.Pluck("name",&names) db.Rows()
|
更新数据
1 2 3 4
| db.Model(&user).Update("name", "123") db.Model(&user).Updates(map[string]interface{}{"Name": "John Updated Again", "Age": 40}) db.Save(&user) db.Model(User{}).Where("name = ?", "kdd").Update("name","dkk")
|
删除数据
1 2
| db.Delete(&user) db.Where("name = ?", "dkk").Delete(&User{})
|
gorm中有软删除和硬删除之分
1 2
| db.Unscoped().Delete(&user) db.Delete(&user)
|
事务
1 2 3 4 5 6 7 8 9 10
| tx := db.Begin() tx.Rollback() tx.Commit()
db.Transaction(func(tx *gorm.DB) error { return nil })
|