Files
database/sql2go/define.go

119 lines
3.9 KiB
Go

// Package sql2go...
//
// Description : sql2go...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2021-10-25 4:50 下午
package sql2go
import "git.zhangdeman.cn/zhangdeman/consts"
// sqlTypeMap mysql数据类型 => go 数据类型映射
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 4:50 下午 2021/10/25
var sqlTypeMap = map[string]string{
"int": consts.DataTypeInt.String(),
"integer": consts.DataTypeInt.String(),
"tinyint": consts.DataTypeInt8.String(),
"smallint": consts.DataTypeInt16.String(),
"mediumint": consts.DataTypeInt32.String(),
"bigint": consts.DataTypeInt64.String(),
"int unsigned": consts.DataTypeUint.String(),
"integer unsigned": consts.DataTypeUint.String(),
"tinyint unsigned": consts.DataTypeUint8.String(),
"smallint unsigned": consts.DataTypeUint16.String(),
"mediumint unsigned": consts.DataTypeUint32.String(),
"bigint unsigned": consts.DataTypeUint64.String(),
"bit": "byte",
"bool": consts.DataTypeBool.String(),
"enum": consts.DataTypeString.String(),
"set": consts.DataTypeString.String(),
"varchar": consts.DataTypeString.String(),
"char": consts.DataTypeString.String(),
"tinytext": consts.DataTypeString.String(),
"mediumtext": consts.DataTypeString.String(),
"text": consts.DataTypeString.String(),
"longtext": consts.DataTypeString.String(),
"blob": consts.DataTypeString.String(),
"tinyblob": consts.DataTypeString.String(),
"mediumblob": consts.DataTypeString.String(),
"longblob": consts.DataTypeString.String(),
"date": "time.Time",
"datetime": "time.Time",
"timestamp": "time.Time",
"time": "time.Time",
"float": consts.DataTypeFloat64.String(),
"double": consts.DataTypeFloat64.String(),
"decimal": consts.DataTypeFloat64.String(),
"binary": consts.DataTypeString.String(),
"varbinary": consts.DataTypeString.String(),
"json": consts.DataTypeString.String(),
}
const (
// DaoTpl 模版
DaoTpl = `// Package {PACKAGE} ...
//
// Description : {PACKAGE} ...
package {PACKAGE}
import (
"gorm.io/gorm"
"errors"
)
// {DATA_STRUCT_NAME} 数据库表的数据结构
{DATA_STRUCT}
// New{DATA_STRUCT_DAO} 获取DAO实例
func New{DATA_STRUCT_DAO}() *{DATA_STRUCT_DAO} {
return &{DATA_STRUCT_DAO}{
table : "{DB_TABLE_NAME}",
}
}
// {DATA_STRUCT_DAO} sql2go tool generate
type {DATA_STRUCT_DAO} struct {
table string
}
// GetDetailBy{PRIMARY_KEY} 根据主键ID获取详情
func ({DAO_RECEIVER} *{DATA_STRUCT_DAO}) GetDetailBy{PRIMARY_KEY}(dbInstance *gorm.DB, {PRIMARY_KEY} {PRIMARY_KEY_TYPE}) (*{DATA_STRUCT_NAME}, error) {
var (
err error
detail {DATA_STRUCT_NAME}
)
if err = dbInstance.Table({DAO_RECEIVER}.table).Where("{PRIMARY_KEY_FIELD} = ?", {PRIMARY_KEY}).Limit(1).First(&detail).Error; nil != err {
return nil, err
}
return &detail, nil
}
// GetList 获取数据列表
func ({DAO_RECEIVER} *{DATA_STRUCT_DAO}) GetList(dbInstance *gorm.DB, condition map[string]any, limit int, offset int) ([]{DATA_STRUCT_NAME}, error) {
if nil == condition {
condition = make(map[string]any)
}
var (
err error
list []{DATA_STRUCT_NAME}
)
if err = dbInstance.Table({DAO_RECEIVER}.table).Where(condition).Limit(limit).Offset(offset).Find(&list).Error; nil != err {
return make([]{DATA_STRUCT_NAME}, 0), err
}
return list, nil
}
// Create 创建数据
func ({DAO_RECEIVER} *{DATA_STRUCT_DAO}) Create(dbInstance *gorm.DB, data *{DATA_STRUCT_NAME}) error {
if nil == data {
return errors.New("data is nil")
}
return dbInstance.Table({DAO_RECEIVER}.table).Create(data).Error
}
`
)