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提供了WithMethod
Option,允许你在生成代码的时候就添加自定义方法,具体使用如下:
这个模版定义了两个方法,你可以把他放到所有需要的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上的所有方法,如示例中的
IsEmpty
和GetName
// 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