GORM GEN 生成代码如何自定义方法和表名

2023年 8月 22日 34.6k 0

GORM GEN: 是安全&友好的go orm 框架,基于gorm,支持多种数据库,mysql、sqlserver、postgres以及clickhouse等,通过代码生成的方式,生成安全&友好的orm代码,同时也支持类似java mybatis的 动态sql代码生成。更多详细介绍和教程请移步gorm.io/gen,本文主要介绍如何给生成的model添加自定义方法和自定义表名。

1. 自定义方法

相信你在日常使用gorm gen开发的过程中也有这种场景:通过gen的g.GenerateModel("users")等方式,从数据库或者sql文件生成了对应的gorm model,已经满足了基本的使用;某些时候希望model上能有一些通用的方法,比如IsEmpty(),判断model是否为空;如果生成之后在修改model,添加自定义方法,下次生成的时候会被覆盖,因此gen提供了WithMethodOption,允许你在生成代码的时候就添加自定义方法,具体使用如下:

  • 写一个通用方法的模版
    这个模版定义了两个方法,你可以把他放到所有需要的model上
  • package method
    type CommonMethod struct {
        ID   int32
        Name *string
    }
    
    func (m *CommonMethod) IsEmpty() bool {
        if m == nil {
            return true
        }
        return m.ID == 0
    }
    
    func (m *CommonMethod) GetName() string {
        if m == nil || m.Name == nil {
            return ""
        }
        return *m.Name
    }
    
  • 生成代码指定需要的自定义方法,可以是一个也可以是全部
    • people表对应的model添加一个自定义方法IsEmpty
    • user表对应的model,添加CommonMethod上的所有方法,如示例中的IsEmptyGetName
    // people表对应的model添加一个自定义方法`IsEmpty`
    g.GenerateModel("people", gen.WithMethod(method.CommonMethod{}.IsEmpty))
    
    // user表对应的model,添加CommonMethod上的所有方法,如示例中的`IsEmpty`和`GetName`
    g.GenerateModel("user", gen.WithMethod(method.CommonMethod))
    
  • 生成之后大代码大概就是这样,截取部分

  • const TableNamePerson = "people"

    // Person mapped from table
    type Person struct {
    ID int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
    Name string `gorm:"column:name" json:"name"`
    Age int32 `gorm:"column:age" json:"age"`
    //..........
    }

    func (p *Person) IsEmpty() bool {
    if p == nil {
    return true
    }
    return p.ID

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论