使用gorm需要注意的点

发布时间 2023-12-15 23:08:37作者: 李若盛开

1、慎用CreatedAt、UpdatedAt和DeletedAt字段

数据库的字段要避开这created_at、updated_at、deleted_at字段,改为created_time、updated_time和deleted_time。

数据插入时,仅仅插入业务数据即可,created_at 和updated_at,deleted_at字段不用手动设置值,gorm自动维护这些字段的值

2、查询的时候,如果没有查到记录也算一个err,需要在正常理解的err之前判断,类似如下的顺序:

    err := db.
        Table(GroupChatTableName).
        Select("gc_status").
        Where(map[string]interface{}{
            "gc_id": gid,
        }).
        Find(&group).
        Error
    
    // 这个要在err前面,因为在gorm里找不到记录也算错误
    if db.RecordNotFound() {
        log.Errorf("query group chat not found")
        return 0, nil
    }
 
    if err != nil {
        log.Errorf("query group chat info by gid failed, err: %v", err)
        return 0, err
    }

Find查询结果是列表,First查询的是单条数据。
当 First、Last、Take 方法找不到记录时,GORM 会返回 ErrRecordNotFound 错误

在使用Raw自定义SQL查询时,使用Scan来接收数据,虽然Find也是可以接收的,但是Find主要还是用来带条件查询的,
链接到Raw后面时条件是不起作用的。所以用Scan函数单纯的接收数据就行了。

3、更新单个字段用update,但通过 map + updates才能更新多个字段,零值字段也会更新