gorm升级V1至V2

647 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Count() 入参类型变化

V1 : Count(int) V2: Count(int64)

Limt()\Offset()

入参类型由 interface{} -> int

Order

v1: 参数为空字符串会被忽略,从而正常执行: Order("") 生成的sql中不带order by v2: 空字符串也会被生成 order by 语句,从而导致 sql 执行失败。需要自行判空

Find

在 V1 版本中, Find(&User{}) 当记录不存在时会返回 ErrRecordNotFound 在 V2 版本中,Find(&User{}) 不会返回 ErrRecordNotFound

查询条件复用

V1示例:

query := db.Where("ctime > 123123123")
// 查询1
query.Offset((page-1) * pageSize).Limit(10).Find(&users)
// 查询2
query.Count(&count)

正确的V2版本 (复用条件时,需要带上 .Session(&grom.Session{}),否则会出现查询2里面带有查询1的条件,在并发情况下还会出现线程安全问题) :

query := db.Where("ctime > 123123123")

// 查询1
query.Session(&gorm.Session{}).Offset((page-1) * pageSize).Limit(10).Find(&users)

// 查询2
query.Session(&gorm.Session{}).Count(&count)