首页 > 其他分享 >gorm使用Save方法处理时间字段的坑

gorm使用Save方法处理时间字段的坑

时间:2023-07-27 11:46:29浏览次数:41  
标签:column db 字段 user time Save gorm

视频地址

Gorm中Save方法处理时间字段的坑

测试代码以及说明

package gorm_tests

import (
    "fmt"
    "github.com/stretchr/testify/require"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "testing"
    "time"
)

const (
    userTableName = "user"
)

type User struct {
    ID   uint   `gorm:"primaryKey;column:id"`
    Name string `gorm:"column:name"`
    Age  uint8  `gorm:"column:age"`
    // Notice gorm内置自动更新的字段!如果是创建/更新的话会自动将当前时间创建/更新进去
    CreatedAt time.Time `gorm:"column:created_at"`
    UpdatedAt time.Time `gorm:"column:updated_at"`

    // Notice 如果要自定义一个不一样的字段,需要加 default:null
    // Notice 并且在创建数据库的时候 这2个字段要加额外的配置:
    /*
      `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
      `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
    */
    CreateTime time.Time `gorm:"column:create_time;default:null"`
    UpdateTime time.Time `gorm:"column:update_time;default:null"`
}

func (u User) TableName() string {
    return userTableName
}

func TestT1(t *testing.T) {
    dsn := "root:123@tcp(127.0.0.1:3307)/whw?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    require.Equal(t, err, nil)
    fmt.Println("db: ", db)

    user := &User{
        ID: 88, // 如果ID存在则更新,如果ID不存在则创建!
    }
    db = db.Model(&User{})
    db.First(&user)
    user.Name = "天蓬"
    user.Age = 99

    // Notice Save方法
    err = db.Save(&user).Error

    require.Equal(t, err, nil)

}

~~~

标签:column,db,字段,user,time,Save,gorm
From: https://www.cnblogs.com/paulwhw/p/17584545.html

相关文章

  • ip6tables-save
    ip6tables-save保存ip6tables表配置补充说明ip6tables-save命令将Linux内核中ip6tables表导出到标准输出设备上。语法ip6tables-save(选项)选项-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值;-t:指定要保存的表的名称。......
  • go语言gorm的CRUD
    插入如果表不存在,则插入失败typeStudentstruct{IDint//缺省主键bigintAUTO_INCREMENTNamestring`gorm:"size:48"`//`gorm:"notnull;type:varchar(48);comment:姓名"`Agebyte//byte=>tinyintunsignedBirthday......
  • java统计数据库字段
    packagedb;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;/***@Author:dominic**/publicclassStatistic{publicstaticvoidmain(String[]args)throwsSQLException,ClassNotFoundException{Stringa="x......
  • oracle partition by 查询重复记录中的1条数据(获取表去重后的数据所有字段)
    1,partitionby分组后给分组数据排序selectt.*,row_number()over(partitionbyt."name",t."rid"orderbyt."rid")as"sort"from"person"t;2、获取去重后的记录selectt2.*from(SELECTt.*,row_number()over(partitionbyt.&......
  • sqlserver insert 限制字符串的长度 小于 表字段定义的长度
    sqlserverinsert时,字符串长度超出表字段限定的长度,报错写一个限定字符串长度的函数createfunctionGetLimitStr(@strvarchar(8000),@lenint)returnsvarchar(8000)asbeginifdatalength(@str)<=@lenreturn@strdeclare@cvarchar(2)declare@......
  • go语言gorm
    ORM对象关系映射(ObjectRelationalMapping,ORM)。指的是对象和关系之间的映射,使用面向对象的方式操作数据库。关系模型和Go对象之间的映射table=>struct,表映射为结构体row=>object,行映射为实例column=>property,字段映射为属性可以认为ORM是一种高级抽象,对......
  • jpa无法保存父类字段
    问题:新拉的分支,在保存对象时无法保存父类字段?相同的代码不同分支,虽然改过一些基础代码,不清楚为什么新的分支出现这个问题解决办法:父类增加@MappedSuperclass注解@Data@MappedSuperclasspublicabstractclassBaseEntity{@Basic@Column(name="create_by")......
  • 查询MySQL公式字段重命名
    查询MySQL公式字段重命名作为一名经验丰富的开发者,你需要教会一位刚入行的小白如何实现“查询MySQL公式字段重命名”。下面将详细介绍整个流程,包括每一步需要做什么以及需要使用的代码及其注释。流程图下表展示了查询MySQL公式字段重命名的流程。步骤动作代码1连接......
  • MyBatisPlus公共字段自动填充
    公共字段自动填充公共字段新增员工,修改、编辑员工信息时,都需要设置创建时间,修改时间等操作,这些操作过于重复、繁琐,为了有更快捷高效的,MyBatisPlus提供了公共字段自动填充功能,当我们执行insert和update操作时才执行MyBatisPLus公共字段自动填充就是在插入或者修改操作时,为指定字......
  • mongodb更新字段的值
    MongoDB更新字段的值作为一名经验丰富的开发者,你需要教会一位刚入行的小白如何在MongoDB中更新字段的值。在本文中,我将向你展示整个更新字段的流程,并提供每一步所需的代码和注释。更新字段的流程下面是更新字段的流程。你可以使用表格来展示这些步骤。步骤描述步骤......