new
This commit is contained in:
@@ -15,7 +15,7 @@ import (
|
||||
|
||||
var mysqlInfo config.MysqlDbInfo
|
||||
var outDir string
|
||||
var singular_table bool
|
||||
var singularTable bool
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "main",
|
||||
@@ -52,7 +52,7 @@ func init() {
|
||||
rootCmd.PersistentFlags().StringVarP(&outDir, "outdir", "o", "", "输出目录")
|
||||
rootCmd.MarkFlagRequired("outdir")
|
||||
|
||||
rootCmd.PersistentFlags().BoolVarP(&singular_table, "singular", "s", false, "是否禁用表名复数")
|
||||
rootCmd.PersistentFlags().BoolVarP(&singularTable, "singular", "s", false, "是否禁用表名复数")
|
||||
rootCmd.MarkFlagRequired("singular")
|
||||
|
||||
rootCmd.Flags().IntVar(&mysqlInfo.Port, "port", 3306, "端口号")
|
||||
@@ -73,7 +73,7 @@ func initConfig() {
|
||||
}
|
||||
}
|
||||
|
||||
//合并
|
||||
//MergeMysqlDbInfo 合并
|
||||
func MergeMysqlDbInfo() {
|
||||
var tmp = config.GetMysqlDbInfo()
|
||||
if len(mysqlInfo.Database) > 0 {
|
||||
@@ -98,7 +98,7 @@ func MergeMysqlDbInfo() {
|
||||
config.SetOutDir(outDir)
|
||||
}
|
||||
|
||||
if singular_table {
|
||||
config.SetSingularTable(singular_table)
|
||||
if singularTable {
|
||||
config.SetSingularTable(singularTable)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,17 +2,17 @@ package config
|
||||
|
||||
import "fmt"
|
||||
|
||||
//
|
||||
//Config .
|
||||
type Config struct {
|
||||
CfgBase
|
||||
MySQLInfo MysqlDbInfo `toml:"mysql_info"`
|
||||
OutDir string `toml:"out_dir"`
|
||||
Simple bool `toml:"simple"`
|
||||
IsJsonTag bool `toml:"isJsonTag"`
|
||||
IsJSONTag bool `toml:"isJsonTag"`
|
||||
SingularTable bool `toml:"singular_table"`
|
||||
}
|
||||
|
||||
//mysql 数据库信息
|
||||
//MysqlDbInfo mysql 数据库信息
|
||||
type MysqlDbInfo struct {
|
||||
Host string `validate:"required"` //地址
|
||||
Port int `validate:"required"` //端口号
|
||||
@@ -21,17 +21,17 @@ type MysqlDbInfo struct {
|
||||
Database string `validate:"required"` //数据库名
|
||||
}
|
||||
|
||||
//更新mysql配置信息
|
||||
//SetMysqlDbInfo 更新mysql配置信息
|
||||
func SetMysqlDbInfo(info *MysqlDbInfo) {
|
||||
_map.MySQLInfo = *info
|
||||
}
|
||||
|
||||
//获取mysql配置信息
|
||||
//GetMysqlDbInfo 获取mysql配置信息
|
||||
func GetMysqlDbInfo() MysqlDbInfo {
|
||||
return _map.MySQLInfo
|
||||
}
|
||||
|
||||
//获取mysql 连接字符串
|
||||
//GetMysqlConStr 获取mysql 连接字符串
|
||||
func GetMysqlConStr() string {
|
||||
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
|
||||
_map.MySQLInfo.Username,
|
||||
@@ -42,32 +42,32 @@ func GetMysqlConStr() string {
|
||||
)
|
||||
}
|
||||
|
||||
//设置输出目录
|
||||
//SetOutDir 设置输出目录
|
||||
func SetOutDir(outDir string) {
|
||||
_map.OutDir = outDir
|
||||
}
|
||||
|
||||
//获取输出目录
|
||||
//GetOutDir 获取输出目录
|
||||
func GetOutDir() string {
|
||||
return _map.OutDir
|
||||
}
|
||||
|
||||
//设置禁用表名复数
|
||||
//SetSingularTable 设置禁用表名复数
|
||||
func SetSingularTable(b bool) {
|
||||
_map.SingularTable = b
|
||||
}
|
||||
|
||||
//获取禁用表名复数
|
||||
//GetSingularTable 获取禁用表名复数
|
||||
func GetSingularTable() bool {
|
||||
return _map.SingularTable
|
||||
}
|
||||
|
||||
//简单输出
|
||||
//GetSimple 简单输出
|
||||
func GetSimple() bool {
|
||||
return _map.Simple
|
||||
}
|
||||
|
||||
//json标记
|
||||
func GetIsJsonTag() bool {
|
||||
return _map.IsJsonTag
|
||||
//GetIsJSONTag json标记
|
||||
func GetIsJSONTag() bool {
|
||||
return _map.IsJSONTag
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"github.com/BurntSushi/toml"
|
||||
)
|
||||
|
||||
//
|
||||
//CfgBase .
|
||||
type CfgBase struct {
|
||||
SerialNumber string `json:"serial_number" toml:"serial_number"` //版本号
|
||||
ServiceName string `json:"service_name" toml:"service_name"` //service名字
|
||||
@@ -44,7 +44,7 @@ func InitFile(filename string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//获取service配置信息
|
||||
//GetServiceConfig 获取service配置信息
|
||||
func GetServiceConfig() (name, displayName, desc string) {
|
||||
name = _map.ServiceName
|
||||
displayName = _map.ServiceDisplayname
|
||||
|
||||
@@ -6,11 +6,11 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
test_file = `
|
||||
testFile = `
|
||||
`
|
||||
)
|
||||
|
||||
//判断是否在测试环境下使用
|
||||
//IsRunTesting 判断是否在测试环境下使用
|
||||
func IsRunTesting() bool {
|
||||
if len(os.Args) > 1 {
|
||||
return strings.HasPrefix(os.Args[1], "-test")
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/xxjwxc/public/mysqldb"
|
||||
)
|
||||
|
||||
//获取表列及注释
|
||||
//OnGetTables 获取表列及注释
|
||||
func OnGetTables(orm *mysqldb.MySqlDB) map[string]string {
|
||||
tbDesc := make(map[string]string)
|
||||
|
||||
@@ -49,7 +49,7 @@ func OnGetTables(orm *mysqldb.MySqlDB) map[string]string {
|
||||
return tbDesc
|
||||
}
|
||||
|
||||
//获取包信息
|
||||
//OnGetPackageInfo 获取包信息
|
||||
func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.GenPackage {
|
||||
var pkg generate.GenPackage
|
||||
for tab, desc := range tabls {
|
||||
@@ -78,7 +78,7 @@ func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.Ge
|
||||
return pkg
|
||||
}
|
||||
|
||||
// 获取表列及注释
|
||||
//OnGetTableElement 获取表列及注释
|
||||
func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
|
||||
var el []generate.GenElement
|
||||
|
||||
@@ -120,9 +120,9 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
|
||||
tmp.SetType(OnGetTypeName(v.Type))
|
||||
|
||||
if strings.EqualFold(v.Key, "PRI") { //设置主键
|
||||
tmp.AddTag(_tag_gorm, "primary_key")
|
||||
tmp.AddTag(_tagGorm, "primary_key")
|
||||
} else if strings.EqualFold(v.Key, "UNI") { //unique
|
||||
tmp.AddTag(_tag_gorm, "unique")
|
||||
tmp.AddTag(_tagGorm, "unique")
|
||||
} else {
|
||||
//index
|
||||
for _, v1 := range Keys {
|
||||
@@ -137,26 +137,26 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
|
||||
_val += ":" + v1.KeyName
|
||||
}
|
||||
|
||||
tmp.AddTag(_tag_gorm, _val)
|
||||
tmp.AddTag(_tagGorm, _val)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//simple output
|
||||
if !config.GetSimple() {
|
||||
tmp.AddTag(_tag_gorm, "column:"+v.Field)
|
||||
tmp.AddTag(_tag_gorm, "type:"+v.Type)
|
||||
tmp.AddTag(_tagGorm, "column:"+v.Field)
|
||||
tmp.AddTag(_tagGorm, "type:"+v.Type)
|
||||
if strings.EqualFold(v.Null, "NO") {
|
||||
tmp.AddTag(_tag_gorm, "not null")
|
||||
tmp.AddTag(_tagGorm, "not null")
|
||||
}
|
||||
}
|
||||
|
||||
//json tag
|
||||
if config.GetIsJsonTag() {
|
||||
if config.GetIsJSONTag() {
|
||||
if strings.EqualFold(v.Field, "id") {
|
||||
tmp.AddTag(_tag_json, "-")
|
||||
tmp.AddTag(_tagJSON, "-")
|
||||
} else {
|
||||
tmp.AddTag(_tag_json, v.Field)
|
||||
tmp.AddTag(_tagJSON, v.Field)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
|
||||
return el
|
||||
}
|
||||
|
||||
//过滤 gorm.Model
|
||||
//OnHaveModel 过滤 gorm.Model
|
||||
func OnHaveModel(list *[]struct {
|
||||
Field string `gorm:"column:Field"`
|
||||
Type string `gorm:"column:Type"`
|
||||
@@ -202,7 +202,7 @@ func OnHaveModel(list *[]struct {
|
||||
return false
|
||||
}
|
||||
|
||||
//类型获取过滤
|
||||
//OnGetTypeName 类型获取过滤
|
||||
func OnGetTypeName(name string) string {
|
||||
//先精确匹配
|
||||
if v, ok := TypeDicMp[name]; ok {
|
||||
@@ -219,7 +219,7 @@ func OnGetTypeName(name string) string {
|
||||
panic(fmt.Sprintf("type (%v) not match in any way.", name))
|
||||
}
|
||||
|
||||
//大驼峰或者首字母大写
|
||||
//OnGetCamelName 大驼峰或者首字母大写
|
||||
func OnGetCamelName(name string) string {
|
||||
if config.GetSingularTable() { //如果全局禁用表名复数
|
||||
return TitleCase(name)
|
||||
@@ -228,9 +228,7 @@ func OnGetCamelName(name string) string {
|
||||
return mybigcamel.Marshal(name)
|
||||
}
|
||||
|
||||
/*
|
||||
首字母大写
|
||||
*/
|
||||
//TitleCase 首字母大写
|
||||
func TitleCase(name string) string {
|
||||
vv := []rune(name)
|
||||
if len(vv) > 0 {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package gtools
|
||||
|
||||
const (
|
||||
_tag_gorm = "gorm"
|
||||
_tag_json = "json"
|
||||
_tagGorm = "gorm"
|
||||
_tagJSON = "json"
|
||||
)
|
||||
|
||||
//精确匹配类型
|
||||
//TypeDicMp 精确匹配类型
|
||||
var TypeDicMp = map[string]string{
|
||||
"int": "int",
|
||||
"bigint": "int64",
|
||||
@@ -19,7 +19,7 @@ var TypeDicMp = map[string]string{
|
||||
"timestamp": "time.Time",
|
||||
}
|
||||
|
||||
//模糊匹配类型
|
||||
//TypeMatchMp 模糊匹配类型
|
||||
var TypeMatchMp = map[string]string{
|
||||
`int[(]\d+[)]`: "int",
|
||||
`bigint[(]\d+[)]`: "int64",
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"github.com/xxjwxc/public/tools"
|
||||
)
|
||||
|
||||
// 打印
|
||||
//Add 打印
|
||||
func (p *PrintAtom) Add(str ...interface{}) {
|
||||
var tmp string
|
||||
for _, v := range str {
|
||||
@@ -18,27 +18,27 @@ func (p *PrintAtom) Add(str ...interface{}) {
|
||||
p.lines = append(p.lines, tmp)
|
||||
}
|
||||
|
||||
// 打印
|
||||
//Generate 打印
|
||||
func (p *PrintAtom) Generate() []string {
|
||||
return p.lines
|
||||
}
|
||||
|
||||
//设置元素名字
|
||||
//SetName 设置元素名字
|
||||
func (e *GenElement) SetName(name string) {
|
||||
e.Name = name
|
||||
}
|
||||
|
||||
//设置元素类型
|
||||
//SetType 设置元素类型
|
||||
func (e *GenElement) SetType(tp string) {
|
||||
e.Type = tp
|
||||
}
|
||||
|
||||
//设置注释
|
||||
//SetNotes 设置注释
|
||||
func (e *GenElement) SetNotes(notes string) {
|
||||
e.Notes = notes
|
||||
}
|
||||
|
||||
//添加一个tag标记
|
||||
//AddTag 添加一个tag标记
|
||||
func (e *GenElement) AddTag(k string, v string) {
|
||||
if e.Tags == nil {
|
||||
e.Tags = make(map[string][]string)
|
||||
@@ -46,7 +46,7 @@ func (e *GenElement) AddTag(k string, v string) {
|
||||
e.Tags[k] = append(e.Tags[k], v)
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
//Generate 获取结果数据
|
||||
func (e *GenElement) Generate() string {
|
||||
tag := ""
|
||||
var tags []string
|
||||
@@ -66,32 +66,32 @@ func (e *GenElement) Generate() string {
|
||||
// struct
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//设置创建语句,备份使用
|
||||
//SetCreatTableStr 设置创建语句,备份使用
|
||||
func (s *GenStruct) SetCreatTableStr(sql string) {
|
||||
s.SqlBuildStr = sql
|
||||
s.SQLBuildStr = sql
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
//SetStructName 获取结果数据
|
||||
func (s *GenStruct) SetStructName(name string) {
|
||||
s.Name = name
|
||||
}
|
||||
|
||||
//设置注释
|
||||
func (e *GenStruct) SetNotes(notes string) {
|
||||
e.Notes = notes
|
||||
//SetNotes 设置注释
|
||||
func (s *GenStruct) SetNotes(notes string) {
|
||||
s.Notes = notes
|
||||
}
|
||||
|
||||
//添加一个/或多个元素
|
||||
//AddElement 添加一个/或多个元素
|
||||
func (s *GenStruct) AddElement(e ...GenElement) {
|
||||
s.Em = append(s.Em, e...)
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
//Generate 获取结果数据
|
||||
func (s *GenStruct) Generate() []string {
|
||||
var p PrintAtom
|
||||
if !config.GetSimple() {
|
||||
p.Add("/******sql******")
|
||||
p.Add(s.SqlBuildStr)
|
||||
p.Add(s.SQLBuildStr)
|
||||
p.Add("******sql******/")
|
||||
}
|
||||
p.Add("//", s.Notes)
|
||||
@@ -108,12 +108,12 @@ func (s *GenStruct) Generate() []string {
|
||||
// package
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//定义包名
|
||||
//SetPackage 定义包名
|
||||
func (p *GenPackage) SetPackage(pname string) {
|
||||
p.Name = pname
|
||||
}
|
||||
|
||||
//通过类型添加import
|
||||
//AddImport 通过类型添加import
|
||||
func (p *GenPackage) AddImport(imp string) {
|
||||
if p.Imports == nil {
|
||||
p.Imports = make(map[string]string)
|
||||
@@ -121,12 +121,12 @@ func (p *GenPackage) AddImport(imp string) {
|
||||
p.Imports[imp] = imp
|
||||
}
|
||||
|
||||
//添加一个结构体
|
||||
//AddStruct 添加一个结构体
|
||||
func (p *GenPackage) AddStruct(st GenStruct) {
|
||||
p.Structs = append(p.Structs, st)
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
//Generate 获取结果数据
|
||||
func (p *GenPackage) Generate() string {
|
||||
p.genimport() //补充 import
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package generate
|
||||
|
||||
//包类
|
||||
//IPackage 包类
|
||||
type IPackage interface {
|
||||
//定义包名
|
||||
SetPackage(string)
|
||||
@@ -12,7 +12,7 @@ type IPackage interface {
|
||||
Generate() string
|
||||
}
|
||||
|
||||
//结构体类
|
||||
//IStruct 结构体类
|
||||
type IStruct interface {
|
||||
//设置创建语句,备份使用
|
||||
SetCreatTableStr(string)
|
||||
@@ -30,7 +30,7 @@ type IStruct interface {
|
||||
Generate() []string
|
||||
}
|
||||
|
||||
//元素类
|
||||
//IElement 元素类
|
||||
type IElement interface {
|
||||
//设置元素名字
|
||||
SetName(string)
|
||||
@@ -51,7 +51,7 @@ type IElement interface {
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//元素类
|
||||
//GenElement 元素类
|
||||
type GenElement struct {
|
||||
Name string //元素名
|
||||
Type string //类型标记
|
||||
@@ -59,15 +59,15 @@ type GenElement struct {
|
||||
Tags map[string][]string //标记
|
||||
}
|
||||
|
||||
//结构体
|
||||
//GenStruct 结构体
|
||||
type GenStruct struct {
|
||||
SqlBuildStr string //创建sql语句
|
||||
SQLBuildStr string //创建sql语句
|
||||
Name string //名字
|
||||
Notes string //注释
|
||||
Em []GenElement //元素组合
|
||||
}
|
||||
|
||||
//包体
|
||||
//GenPackage 包体
|
||||
type GenPackage struct {
|
||||
Name string //名字
|
||||
Imports map[string]string //元素组合
|
||||
@@ -77,12 +77,14 @@ type GenPackage struct {
|
||||
//间隔
|
||||
var _interval = "\t"
|
||||
|
||||
//EImportsHead .
|
||||
var EImportsHead = map[string]string{
|
||||
"stirng": `"string"`,
|
||||
"time.Time": `"time"`,
|
||||
"gorm.Model": `"github.com/jinzhu/gorm"`,
|
||||
}
|
||||
|
||||
//PrintAtom .
|
||||
type PrintAtom struct {
|
||||
lines []string
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/xxjwxc/public/tools"
|
||||
)
|
||||
|
||||
//开始执行
|
||||
//Execute 开始执行
|
||||
func Execute() {
|
||||
|
||||
orm := mysqldb.OnInitDBOrm(config.GetMysqlConStr())
|
||||
|
||||
Reference in New Issue
Block a user