Go语言gorm框架 | 青训营

72 阅读2分钟

gorm

这个相当于对数据库的操作的封装。以下是特性

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

首先安装

go get -u gorm.io/gorm 
go get -u gorm.io/driver/sqlite 

对数据库的连接mysql

 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

插入数据

user := User{Name: "Jinzhu", Age: 19, Restime: "2023"}
	result := db.Create(&user)

首先定义一个结构体,属性名(首字母大写)就跟表名的字段名一样。先要在之前确定表名

func (User) TableName() string {
	return "user" //指定表名
}

结果

image.png

查询

var user User
result := db.First(&user)

image.png db.Fist查询出第一条数据,指针传递之后打印user,在fisrt(,3)就会找出id为3的条件查询

更新

result := db.Model(&User{}).Where("name= ?", "Jinzhu").Update("age", "22")

也是在结构体的基础上,以名字name为限制条件,跟新年龄

image.png

删除

result := db.Where("ID=?", 3).Delete(&user)
result :=db.Delete(&user{},3)

这两个是一样的效果,在go中还可以使用切片批量删除

var users = []User{{ID: 1}, {ID: 2}, {ID: 3}} db.Delete(&users) 
// DELETE FROM users WHERE id IN (1,2,3);

总结

id没写是gorm自动认为是主键,设置了自增,也不知道为什么从2开始。在删除中where后的delete中代表的是表名,而下面那个就是一个结构体相当于一个参数,还是要看看文档,在文档中还有许多关于curd的方法,能实现许多需求的要求。看起来是比较java要自己写连接,sql语句很方便。但还是有点不好理解,没有那么直观,可能水平不够。在文档中也写出了,语句相当于什么sql语句读者可以慢慢看。