首页 > 其他 > 详细

gorm使用小结

时间:2019-12-01 23:48:00      阅读:166      评论:0      收藏:0      [点我收藏+]

  • db.Create(user)
  • db.Save(user)

参数只能用结构体指针**,因为要根据指针写入该条插入的数据,
所以user可以作为该条数据使用。

save方法在没有主键的时候是新增,有主键的时候是更新,
可以使用 db.NewRecord()判断,该方法只检查 结构体对应数据表 的主键是否为空,不查表。

  • db.Delete(&User{})

  • db.Modle(&User{}).Update()
  • db.Modle(&User{}).Updates()
  1. update更新单列,Update("name","wl")或者当Updates用。
  2. updates可以传入map/struct。
    struct只更新非零值的字段。
    map的key可以是struct的key,也可以是数据表列名。
    map的value要对应struct的类型,比如map[string]interface{}{"updated_at": time.Now()},不能使用字符串。

  • db.First(&user)
  • db.Last(&user)
  • db.Take(&user)
  • db.Find(&users) users := make([]User, 0)
  • db.Scan()
    结果放入另一个struct
  • db.Pluck("name", &names) names := make([]stirng, 0)
    单个字段的slice
  1. 查询条件可以在Where中增加,也可以内联,First(&user, "id=?", 1)

其他

gorm的增删改查是 链式方法,每次返回*gorm.DB,即可任意拼接。

  • db.Table("users") 或者 db.Modle(&User{}) 指定表名
  • db.Where("name=?", name)

示例

  1. 查询结果为一个数字时要用struct来接收
    type Amount struct { Total float64 }
    amount := Amount{}
    db.Select("SUM(price) AS total").Scan(&amount)

  2. 更新设置NULL
    struct是指针类型,Update("deleted_at", nil)
    否则 Update("name", gorm.Expr("NULL))
    Updates(map[string]interface{}{"name": gorm.Expr("NULL")})

  3. 时区
    创建记录时:
    必须要是time类型,会根据时区来确定插入的数据时间。

go时间 go时区 数据库存储时间 数据库显示时间
2019-12-01 08:00:00 +8:00 2019-12-01 00:00:00 UTC 2019-12-01 08:00:00
2019-12-01 08:00:00 +0:00 2019-12-01 08:00:00 UTC 2019-12-01 16:00:00

?????查询时:
????1.可以用Where("updated_at < ?", "2019-12-01");
????2.时区不影响查询,只将时间部分作为本地时间进行查询。

TODO

关联表,select, join

gorm使用小结

原文:https://www.cnblogs.com/wayland3/p/11968378.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!