zoukankan      html  css  js  c++  java
  • gorm使用小结

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

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

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

    • db.Delete(&User{})

    • db.Modle(&User{}).Update()
    • db.Modle(&User{}).Updates()

    1.Modle可以传入&user, 得到的是 已修改 字段的struct,其他字段是默认字段,
    2.map类型只能更新到外层(里层指针类型的字段会被置为空),嵌套的struct要解析到struct上去更新。

    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. 类型
      gorm: bool, time必须是对应的类型,mysql则可以是0, 1 和字符串。
      gorm 类型对不上则会使用对应struct的零值。

    4. 时区
      创建记录时:
      必须要是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

  • 相关阅读:
    [转]使用Java Mission Control进行内存分配分析
    JDE开发端安装问题(JDE初步卸载重装)
    JDE开发端安装笔记
    [转]JDE910--jas.ini参数说明
    [转]十个常见的缓存使用误区及建议
    JDE910笔记2--OMW项目建立及简单使用
    JDE910笔记1--基础介绍及配置
    [转] 编程之美--字符串移位包含的问题
    关于JDBC
    [转]何时使用委托而不使用接口(C# 编程指南)
  • 原文地址:https://www.cnblogs.com/wayland3/p/11968378.html
Copyright © 2011-2022 走看看