Gorm
2022-05-10 23:54:19 10 举报
AI智能生成
登录查看完整内容
gorm
作者其他创作
大纲/内容
模型是 GO中标准的struct
模型定义
如:默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
GORM 倾向于约定,而不是配置
约定
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeleteAt `gorm:"index"`
构成:
可将gorm.Modle嵌入到自己的结构体中
gorm.Model
`gorm:"<-:create"`
允许读和创建
`gorm:"<-update"`
允许读和更新
`gorm:"<-"`
允许读和写(包含创建和更新)
`gorm:"<-:false"`
允许读,禁止写
`gorm:"->"`
只读
`gorm:"-"`
读写操作均会忽略该字段
可用标签控制字段级别的权限,可以让一个字段的权限是只读、只写、只创建、只更新或者被忽略
高级选项
CreatedAt、UpdatedAt字段,gorm在创建、更新时会自动填充当前时间
如果要使用不同名称的字段,可配置auto相关标签
如果要保存UNIX(毫/纳)秒时间戳,而不是time,则可修改字段字段类型和标签
创建、更新时间跟踪
model的tag是可选的
tag名大小写不敏感,但建议用camelCase风格
字段标签
基本使用
高级配置
Mysql
Postgres
Sqlite
Sql Server
连接数据库
user:= User{....}
1、编写数据记录
result :=db.create(&user)
2、通过数据的指针创建记录
创建记录
创建记录并更新给出的字段。
创建记录并更新未给出的字段。
用指定的字段创建记录
db.Create(&users)
批量创建记录
钩子种类
定义钩子示例
可定义钩子,在创建记录时调用这些钩子方法
创建记录的钩子
根据Map创建记录
普通创建
1、如果关联的值是非零值,则这些关联数据会被更新插入,且钩子也会被调用
2、可通过Select、Omit跳过关联保存
关联创建
`gorm:"default:18"`
插入记录到数据库时,默认值 会被用于 填充值为 零值 的字段
若要在迁移时跳过默认值定义,你可以使用 default:(-)
默认值
创建记录冲突解决方案
高级
创建
// 获取第一条记录(主键升序)
db.First(&user)
// 获取一条记录,没有指定排序字段
db.Take(&user)
// 获取最后一条记录(主键降序)
db.Last(&user)
查询单个记录
根据主键查询
查询所有记录
=
<>(不等于)
IN
LIKE
AND
TIME
BETWEEN
注意:当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、''、false 或其他 零值,该字段不会被用于构建查询条件
用Struct或Map作为条件来查询
Not In
NOT
db.Where().Or().Find()
OR
条件查询
db.Select("name”, “age").Find(&users)
查询特定字段
Order排序
db.Limit(10).Offset(5).Find(&users)// SELECT * FROM users OFFSET 5 LIMIT 10;
Limit&Offset
https://learnku.com/docs/gorm/v2/query/9733#3d16eb
Group & Having
Distinct
https://learnku.com/docs/gorm/v2/query/9733#a231f4
Joins
将结果保存至Struct
San
查询
// 检查 ErrRecordNotFound 错误
注意:没有找到记录时,它会返回 ErrRecordNotFound 错误
智能选择字段
sharedLock 不会阻止其他 transaction 读取同一行lockForUpdate 会阻止其他 transaction 读取同一行
加锁与解锁
https://blog.csdn.net/weixin_41565755/article/details/121261581
事务加锁与解锁
加锁
子查询
Count
高级查询
更新
CRUD
Gorm
0 条评论
回复 删除
下一页