前言
Gorm是golong的一个ORM,封装了很多常用方法。主要用于数据库连接等相关操作。本文主要是对自己看的相关资料进行总结 由于gorm有内含十分齐全的中文文档,因此也可直接查看相关文档 gorm.io/zh_CN/
下载安装
windows系统下下载安装可以直接使用git命令行工具进行获取。
go get -u github.com/jinzhu/gorm
在代码中引用时需要引用gorm类库和对应的数据库操作的驱动
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
数据库连接操作
db,err:=gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/testdb?charset=utf8")
gorm.Open()第一个参数表示连接的数据库的类型,第二个参数包括数据库的用户名,密码,Ip地址,端口号,具体数据库和编码规则。
db.AutoMigrate(&User{})
db.AutoMigrate(&User{}, &Product{}, &Order{})
gorm可以支持自动迁移,也就是自动的表结构迁移,只会创建表,补充缺少的列,缺少的索引。但并不会更改已经存在的列类型,也不会删除不再用的列,这样设计的目的是为了保护已存在的数据。可以同时针对多个表进行迁移设置。
增删查改工作
表的创建:
db.CreateTable(&User{})
在创建表后,数据库会出现表的复数形式,例如user表创建后在数据库中为user表。如果不想创建复数形式的表名,可以设置一下语句:
db.SingularTable(true) //全局设置表名不可以为复数形式。
表的删除:
r1:=db.DropTable("User")
r2:=db.DropTable(&User{})
与创建表类似,都可以使用表名字符串或者模型地址类型进行删除。
如果在删除时需要删除两个表,并且需要用到同步概念,则需要在事务中创建。gorm中事务处理与其他语言不同,因为golang中没有try catch的结构,所以只能通过条件判断来进行处理回滚或者提交。
表的查询:
db.Select([]string{"name"}).Find(&User)
表的修改
db.Model(&User).Where("id=?", 1224343).Update("name", juejin)