这是我参与「第五届青训营」伴学笔记活动的第五天 gorm mdel对应数据库中的一张表。 定义表名直接通过返回string类型的函数即可实现。如果没有设置表名会使用结构体蛇形复数作为表名。以及字段名的蛇形复数作为列名
type biao struct{}
func(a biao) name string{
return"xxx"
}
接下来需要构造完整的gorm model,这里要用到gora.open 首先需要连接数据库
db,err:=gora.open(#注意dsn格式#mysql.open("xxxx"),&gora.Config{})
if err!=nil{
panic("xxxxx")}
config传递自定义配置。 接下来创建数据,创建一条数据传入的是一个对象,当我们创建多个数据传入的结构体类型的数组 db.Create(&结构体{初值})注意create会返回gorm类型
a:=db.Create(&结构体{属性1:初值,属性2:初值})#创建一条
b:=db.Create([]*Product{{属性1:初值,属性2:初值...},{属性1:初值,属性2:初值}....}创建多条数据
#一般需要判断是否出错#
fmt.Println(a.Error)
#如果需要遍历#
for _,p:=range products{
fmt.Println(p.属性)
}
查询
firt获取第一条记录,在gorm中主键升序,会报错,Find不会
db.First(&结构体指针,查询条件)
查询多条为
a:=db.Where().Find()
db.Where(map[string]interface{}{属性1:value,属性2:value...}).Find(结构体指针或数组)
返回记录数
a.RowsAffected
更新数据
db.Model(&结构体指针).Update("xxx",value)
#调用名字可以用.Model()也可以使用命名函数#
#如果更新多个使用Updates,此时仅更新非零值字段#
db.Model(&结构体指针).Update(结构体类型{"xxx",value})
#如果要更新非零值#
db.Model(&结构体指针).Update(map[属性的类型]interface{{"xxx",value})
更新单个列
db.Model(&user{主键}).Where().Update("属性名"
删除数据
db.delete(结构体,条件)
连接驱动
gorm通过驱动连接数据库因此需要导入驱动接口,同时我们需要找到dsn.若有兼容相关目标的数据库的驱动,可以复用该驱动。
import(
"gorm.io/driver/xxxxx"
"gorm.io/gorm"
)
dsn:="xxxxxxx"
db,err:=gorm.Open(sqlserver.Open(dsn),&gorm.Config{})
定义主键,列名
type Product struct{
xxx 类型 'gorm:"primarykey"'
xxx 类型 'gorm:"column:列名"'
xxx 类型 'gorm:"default:xxx"'#默认值设置
}
可以注意到gorm中的列名,主键名和结构体中的属性名可以不一样,因此有("gorm中的属性名“,value)("gorm中的属性名1":value,"gorm中的属性名2":value),map[string]interface{}(结构体类型{结构体名1:value,结构体名2:value....}) 三种传参方式
a:=&product{}
db.Clauses(clause.OnConflict{DoNothing:true}).Create(a)
#True表示有冲突依然创建#
动词api直接执行sql不再执行后面的api