Gorm怎么用啊 | 青训营

127 阅读2分钟

ORM是“对象-关系-映射”的简称,Go语言中常用的ORM框架有很多,如gorm、facebook-ent、xorm、upper/db、gorose等

gorm是一个使用Go语言编写的ORM框架。文档齐全,对开发者友好,支持主流数据库。

GORM是Golang目前比较人们的数据库ORM操作库,对开发者也比较友好,使用非常简单,使用上主要就是把struct类型和数据库表记录进行映射,操作数据库的时候不需要直接手写Sql代码,这里主要介绍MYSQL数据库。

GORM库github地址:github.com/go-gorm/gor…

go.mod

github.com/jinzhu/gorm v1.9.16

在执行Go Mod Tidy的时候会把相关需要的依赖(这个用词可能不准)自动添加到mod文件中。

初始化

func init() { var err error drive, err = gorm.Open("mysql", "root:root123456@(localhost:3306)/funtester?charset=utf8&parseTime=true") if err != nil { fmt.Println(err) log.Fatalln("mysql conntect err") } drive.DB().SetMaxOpenConns(200) drive.DB().SetConnMaxLifetime(10 * time.Second) drive.DB().SetConnMaxIdleTime(10 * time.Second) drive.DB().SetMaxIdleConns(20) // 迁移 schema drive.AutoMigrate(&Funtester{}) //注意: AutoMigrate 会创建表,缺少的外键,约束,列和索引,并且会更改现有列的类型(如果其大小、精度、是否为空可更改)。但 不会 删除未使用的列,以保护您的数据。 //db.AutoMigrate(&User{}, &Product{}, &Order{}) //drive.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&Funtester{})//带参数的迁移

}

select

就是把查询条件分类然后单独写不同的条件,由gorm框架做SQL语句的拼接

func TestSelect2(t *testing.T) { var fs []Funtester var f Funtester drive.Where("id = ?", 45).First(&f)//另外一种写法 //fmt.Println(f) find := drive.Where("name like ?", "fun%").Find(&fs).Limit(10).Order("id")//多查询条件串联 rows, _ := find.Rows()//获取结果 defer rows.Close() for rows.Next() { var ff Funtester drive.ScanRows(rows, &ff) fmt.Println(ff.Age, ff.Name) } //另外一种写法 var f1 Funtester drive.Where("name LIKE ?", "fun").Or("id = ?", 123).First(&f1) fmt.Println(f1)

}

update

func TestUpdate(t *testing.T) { drive.Model(&Funtester{}).Where("id = ?", 241860).Update("name", base.FunTester+"3") }

insert

gorm官文文档支持批量插入的

delete

func TestDelete(t *testing.T) { db := drive.Where("id = ?", 241859).Delete(&Funtester{}) fmt.Println(db.RowsAffected) }

事务

gorm事务默认是开启的。为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。

如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升。

一般不推荐禁用

如同在 MySQL 中操作事务一样,事务的开始是以 Begin 开始,以 Commit 结束:

Copy //事务测试 func TestGormTx(user model.User) (err error) { tx := constants.GVA_DB.Begin() // 注意,一旦你在一个事务中,使用tx作为数据库句柄 if err := tx.Create(&model.User{ Name: "liliya", Age: 13, Sex: 0, Phone: "15543212346", }).Error; err != nil { tx.Rollback() return err }

if err := tx.Updates(&model.User{
	Id:    user.Id,
	Name:  user.Name,
	Age:   user.Age,
	Sex:   user.Sex,
	Phone: user.Phone,
}).Error; err != nil {
	tx.Rollback()
	return err
}

tx.Commit()
return nil

} 以上就是关于 GORM 使用相关的操作