zoukankan      html  css  js  c++  java
  • Gorm 常用操作总结

    摘要:由于在实习的工作中,采用的是 Go 语言,数据库操作采用的 ORM 框架是 Gorm, 所以就来总结一下使用过程中遇到的一些问题。

    基本操作

    Save

    当匹配主键的数据不存在时,它的效果是插入一条新数据,而当匹配的主键存在时,则更新全部字段。无论字段是否做了修改或者是定义类型的默认值。

    package model
    
    const UserTable = "t_user"
    
    type User struct {
        Id           int     `gorm:"column:id; type:int(11);primary_key"`
        Name         string  `gorm:"column:name; type:varchar(32);"`
        Age          int     `gorm:"column:age; type:int(11);"`
        Description  string  `gorm:"column:description; type:varchar(512);"`
    }
    
    func (User) TableName() string {
        return UserTable
    }

    note: 特别注意 Id 的定义中的 primary_key, 如果没有加这个 Save 方法是无法正常工作的。

    note: 如果在定义时,没有给 Age 赋值,那么这条数据的 Age 将被置为 0。

    note: 可以通过判断传入的主键字段是否为空来觉得是否要将此字段加入到结构体中,如果不为空,加入结构体,此时:找到则更新;如果为空,则会新建。

    用处:不用显示判断是新增数据还是更新数据,可以让代码更加简洁。

    func (User) SaveOne(db *gorm) {
        user := User{Id:1, Name:"Tom", Age:18, Description:"A Man"}
        if err := db.Save(&user).Error; err != nil {
            fmt.Errorf("Save user failed, err: %+v
    ", err)
            return
        }
    }
    // id 为主键
    // 当记录不存在时,执行的 Sql 语句是:
    insert into t_user(id, name, age, description) value (1, "Tom", 18, "A Man")
    // 当记录存在时,执行的 Sql 语句是:
    update t_user set name = "Tom", age = 18, description = "A Man" where id = 1

    Where

    Gorm 的一个非常好用的特征就是链式查询,在不同条件下需要有不同的查询条件这样的场景中,利用该特征能帮助我们大大简化代码。

    func (User) FindQuery(query *gorm.DB, installId, appId string) *gorm.DB {
        query = query.Where("install_id = ?", installId)
        if appId != "" {
            query = query.Where("app_id = ?", appId)
        }
        return query
    }

    参考资料:

    https://juejin.im/post/5d29988e6fb9a07efc49b612

  • 相关阅读:
    springboot 整合Elasticsearch
    SpringBoot 使用AOP记录接口访问日志
    Java8 Collectors类的静态工厂方法
    Java8 Stream流方法
    Java8 Lambda表达式
    Java通过行为参数化传递代码
    springboot使用SpringTask实现定时任务
    Cron表达式
    springboot整合swagger-ui
    springboot整合redis
  • 原文地址:https://www.cnblogs.com/zpcoding/p/12615345.html
Copyright © 2011-2022 走看看