This commit is contained in:
谢小军
2019-08-03 01:34:08 +08:00
parent 3e41ef9304
commit d467d817cf
9 changed files with 73 additions and 73 deletions

View File

@@ -15,7 +15,7 @@ import (
var mysqlInfo config.MysqlDbInfo var mysqlInfo config.MysqlDbInfo
var outDir string var outDir string
var singular_table bool var singularTable bool
var rootCmd = &cobra.Command{ var rootCmd = &cobra.Command{
Use: "main", Use: "main",
@@ -52,7 +52,7 @@ func init() {
rootCmd.PersistentFlags().StringVarP(&outDir, "outdir", "o", "", "输出目录") rootCmd.PersistentFlags().StringVarP(&outDir, "outdir", "o", "", "输出目录")
rootCmd.MarkFlagRequired("outdir") rootCmd.MarkFlagRequired("outdir")
rootCmd.PersistentFlags().BoolVarP(&singular_table, "singular", "s", false, "是否禁用表名复数") rootCmd.PersistentFlags().BoolVarP(&singularTable, "singular", "s", false, "是否禁用表名复数")
rootCmd.MarkFlagRequired("singular") rootCmd.MarkFlagRequired("singular")
rootCmd.Flags().IntVar(&mysqlInfo.Port, "port", 3306, "端口号") rootCmd.Flags().IntVar(&mysqlInfo.Port, "port", 3306, "端口号")
@@ -73,7 +73,7 @@ func initConfig() {
} }
} }
//合并 //MergeMysqlDbInfo 合并
func MergeMysqlDbInfo() { func MergeMysqlDbInfo() {
var tmp = config.GetMysqlDbInfo() var tmp = config.GetMysqlDbInfo()
if len(mysqlInfo.Database) > 0 { if len(mysqlInfo.Database) > 0 {
@@ -98,7 +98,7 @@ func MergeMysqlDbInfo() {
config.SetOutDir(outDir) config.SetOutDir(outDir)
} }
if singular_table { if singularTable {
config.SetSingularTable(singular_table) config.SetSingularTable(singularTable)
} }
} }

View File

@@ -2,17 +2,17 @@ package config
import "fmt" import "fmt"
// //Config .
type Config struct { type Config struct {
CfgBase CfgBase
MySQLInfo MysqlDbInfo `toml:"mysql_info"` MySQLInfo MysqlDbInfo `toml:"mysql_info"`
OutDir string `toml:"out_dir"` OutDir string `toml:"out_dir"`
Simple bool `toml:"simple"` Simple bool `toml:"simple"`
IsJsonTag bool `toml:"isJsonTag"` IsJSONTag bool `toml:"isJsonTag"`
SingularTable bool `toml:"singular_table"` SingularTable bool `toml:"singular_table"`
} }
//mysql 数据库信息 //MysqlDbInfo mysql 数据库信息
type MysqlDbInfo struct { type MysqlDbInfo struct {
Host string `validate:"required"` //地址 Host string `validate:"required"` //地址
Port int `validate:"required"` //端口号 Port int `validate:"required"` //端口号
@@ -21,17 +21,17 @@ type MysqlDbInfo struct {
Database string `validate:"required"` //数据库名 Database string `validate:"required"` //数据库名
} }
//更新mysql配置信息 //SetMysqlDbInfo 更新mysql配置信息
func SetMysqlDbInfo(info *MysqlDbInfo) { func SetMysqlDbInfo(info *MysqlDbInfo) {
_map.MySQLInfo = *info _map.MySQLInfo = *info
} }
//获取mysql配置信息 //GetMysqlDbInfo 获取mysql配置信息
func GetMysqlDbInfo() MysqlDbInfo { func GetMysqlDbInfo() MysqlDbInfo {
return _map.MySQLInfo return _map.MySQLInfo
} }
//获取mysql 连接字符串 //GetMysqlConStr 获取mysql 连接字符串
func GetMysqlConStr() string { func GetMysqlConStr() string {
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
_map.MySQLInfo.Username, _map.MySQLInfo.Username,
@@ -42,32 +42,32 @@ func GetMysqlConStr() string {
) )
} }
//设置输出目录 //SetOutDir 设置输出目录
func SetOutDir(outDir string) { func SetOutDir(outDir string) {
_map.OutDir = outDir _map.OutDir = outDir
} }
//获取输出目录 //GetOutDir 获取输出目录
func GetOutDir() string { func GetOutDir() string {
return _map.OutDir return _map.OutDir
} }
//设置禁用表名复数 //SetSingularTable 设置禁用表名复数
func SetSingularTable(b bool) { func SetSingularTable(b bool) {
_map.SingularTable = b _map.SingularTable = b
} }
//获取禁用表名复数 //GetSingularTable 获取禁用表名复数
func GetSingularTable() bool { func GetSingularTable() bool {
return _map.SingularTable return _map.SingularTable
} }
//简单输出 //GetSimple 简单输出
func GetSimple() bool { func GetSimple() bool {
return _map.Simple return _map.Simple
} }
//json标记 //GetIsJSONTag json标记
func GetIsJsonTag() bool { func GetIsJSONTag() bool {
return _map.IsJsonTag return _map.IsJSONTag
} }

View File

@@ -9,7 +9,7 @@ import (
"github.com/BurntSushi/toml" "github.com/BurntSushi/toml"
) )
// //CfgBase .
type CfgBase struct { type CfgBase struct {
SerialNumber string `json:"serial_number" toml:"serial_number"` //版本号 SerialNumber string `json:"serial_number" toml:"serial_number"` //版本号
ServiceName string `json:"service_name" toml:"service_name"` //service名字 ServiceName string `json:"service_name" toml:"service_name"` //service名字
@@ -44,7 +44,7 @@ func InitFile(filename string) error {
return nil return nil
} }
//获取service配置信息 //GetServiceConfig 获取service配置信息
func GetServiceConfig() (name, displayName, desc string) { func GetServiceConfig() (name, displayName, desc string) {
name = _map.ServiceName name = _map.ServiceName
displayName = _map.ServiceDisplayname displayName = _map.ServiceDisplayname

View File

@@ -6,11 +6,11 @@ import (
) )
const ( const (
test_file = ` testFile = `
` `
) )
//判断是否在测试环境下使用 //IsRunTesting 判断是否在测试环境下使用
func IsRunTesting() bool { func IsRunTesting() bool {
if len(os.Args) > 1 { if len(os.Args) > 1 {
return strings.HasPrefix(os.Args[1], "-test") return strings.HasPrefix(os.Args[1], "-test")

View File

@@ -12,7 +12,7 @@ import (
"github.com/xxjwxc/public/mysqldb" "github.com/xxjwxc/public/mysqldb"
) )
//获取表列及注释 //OnGetTables 获取表列及注释
func OnGetTables(orm *mysqldb.MySqlDB) map[string]string { func OnGetTables(orm *mysqldb.MySqlDB) map[string]string {
tbDesc := make(map[string]string) tbDesc := make(map[string]string)
@@ -49,7 +49,7 @@ func OnGetTables(orm *mysqldb.MySqlDB) map[string]string {
return tbDesc return tbDesc
} }
//获取包信息 //OnGetPackageInfo 获取包信息
func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.GenPackage { func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.GenPackage {
var pkg generate.GenPackage var pkg generate.GenPackage
for tab, desc := range tabls { for tab, desc := range tabls {
@@ -78,7 +78,7 @@ func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.Ge
return pkg return pkg
} }
// 获取表列及注释 //OnGetTableElement 获取表列及注释
func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement { func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
var el []generate.GenElement var el []generate.GenElement
@@ -120,9 +120,9 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
tmp.SetType(OnGetTypeName(v.Type)) tmp.SetType(OnGetTypeName(v.Type))
if strings.EqualFold(v.Key, "PRI") { //设置主键 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 } else if strings.EqualFold(v.Key, "UNI") { //unique
tmp.AddTag(_tag_gorm, "unique") tmp.AddTag(_tagGorm, "unique")
} else { } else {
//index //index
for _, v1 := range Keys { for _, v1 := range Keys {
@@ -137,26 +137,26 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement {
_val += ":" + v1.KeyName _val += ":" + v1.KeyName
} }
tmp.AddTag(_tag_gorm, _val) tmp.AddTag(_tagGorm, _val)
} }
} }
} }
//simple output //simple output
if !config.GetSimple() { if !config.GetSimple() {
tmp.AddTag(_tag_gorm, "column:"+v.Field) tmp.AddTag(_tagGorm, "column:"+v.Field)
tmp.AddTag(_tag_gorm, "type:"+v.Type) tmp.AddTag(_tagGorm, "type:"+v.Type)
if strings.EqualFold(v.Null, "NO") { if strings.EqualFold(v.Null, "NO") {
tmp.AddTag(_tag_gorm, "not null") tmp.AddTag(_tagGorm, "not null")
} }
} }
//json tag //json tag
if config.GetIsJsonTag() { if config.GetIsJSONTag() {
if strings.EqualFold(v.Field, "id") { if strings.EqualFold(v.Field, "id") {
tmp.AddTag(_tag_json, "-") tmp.AddTag(_tagJSON, "-")
} else { } 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 return el
} }
//过滤 gorm.Model //OnHaveModel 过滤 gorm.Model
func OnHaveModel(list *[]struct { func OnHaveModel(list *[]struct {
Field string `gorm:"column:Field"` Field string `gorm:"column:Field"`
Type string `gorm:"column:Type"` Type string `gorm:"column:Type"`
@@ -202,7 +202,7 @@ func OnHaveModel(list *[]struct {
return false return false
} }
//类型获取过滤 //OnGetTypeName 类型获取过滤
func OnGetTypeName(name string) string { func OnGetTypeName(name string) string {
//先精确匹配 //先精确匹配
if v, ok := TypeDicMp[name]; ok { 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)) panic(fmt.Sprintf("type (%v) not match in any way.", name))
} }
//大驼峰或者首字母大写 //OnGetCamelName 大驼峰或者首字母大写
func OnGetCamelName(name string) string { func OnGetCamelName(name string) string {
if config.GetSingularTable() { //如果全局禁用表名复数 if config.GetSingularTable() { //如果全局禁用表名复数
return TitleCase(name) return TitleCase(name)
@@ -228,9 +228,7 @@ func OnGetCamelName(name string) string {
return mybigcamel.Marshal(name) return mybigcamel.Marshal(name)
} }
/* //TitleCase 首字母大写
首字母大写
*/
func TitleCase(name string) string { func TitleCase(name string) string {
vv := []rune(name) vv := []rune(name)
if len(vv) > 0 { if len(vv) > 0 {

View File

@@ -1,11 +1,11 @@
package gtools package gtools
const ( const (
_tag_gorm = "gorm" _tagGorm = "gorm"
_tag_json = "json" _tagJSON = "json"
) )
//精确匹配类型 //TypeDicMp 精确匹配类型
var TypeDicMp = map[string]string{ var TypeDicMp = map[string]string{
"int": "int", "int": "int",
"bigint": "int64", "bigint": "int64",
@@ -19,7 +19,7 @@ var TypeDicMp = map[string]string{
"timestamp": "time.Time", "timestamp": "time.Time",
} }
//模糊匹配类型 //TypeMatchMp 模糊匹配类型
var TypeMatchMp = map[string]string{ var TypeMatchMp = map[string]string{
`int[(]\d+[)]`: "int", `int[(]\d+[)]`: "int",
`bigint[(]\d+[)]`: "int64", `bigint[(]\d+[)]`: "int64",

View File

@@ -9,7 +9,7 @@ import (
"github.com/xxjwxc/public/tools" "github.com/xxjwxc/public/tools"
) )
// 打印 //Add 打印
func (p *PrintAtom) Add(str ...interface{}) { func (p *PrintAtom) Add(str ...interface{}) {
var tmp string var tmp string
for _, v := range str { for _, v := range str {
@@ -18,27 +18,27 @@ func (p *PrintAtom) Add(str ...interface{}) {
p.lines = append(p.lines, tmp) p.lines = append(p.lines, tmp)
} }
// 打印 //Generate 打印
func (p *PrintAtom) Generate() []string { func (p *PrintAtom) Generate() []string {
return p.lines return p.lines
} }
//设置元素名字 //SetName 设置元素名字
func (e *GenElement) SetName(name string) { func (e *GenElement) SetName(name string) {
e.Name = name e.Name = name
} }
//设置元素类型 //SetType 设置元素类型
func (e *GenElement) SetType(tp string) { func (e *GenElement) SetType(tp string) {
e.Type = tp e.Type = tp
} }
//设置注释 //SetNotes 设置注释
func (e *GenElement) SetNotes(notes string) { func (e *GenElement) SetNotes(notes string) {
e.Notes = notes e.Notes = notes
} }
//添加一个tag标记 //AddTag 添加一个tag标记
func (e *GenElement) AddTag(k string, v string) { func (e *GenElement) AddTag(k string, v string) {
if e.Tags == nil { if e.Tags == nil {
e.Tags = make(map[string][]string) 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) e.Tags[k] = append(e.Tags[k], v)
} }
//获取结果数据 //Generate 获取结果数据
func (e *GenElement) Generate() string { func (e *GenElement) Generate() string {
tag := "" tag := ""
var tags []string var tags []string
@@ -66,32 +66,32 @@ func (e *GenElement) Generate() string {
// struct // struct
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//设置创建语句,备份使用 //SetCreatTableStr 设置创建语句,备份使用
func (s *GenStruct) SetCreatTableStr(sql string) { func (s *GenStruct) SetCreatTableStr(sql string) {
s.SqlBuildStr = sql s.SQLBuildStr = sql
} }
//获取结果数据 //SetStructName 获取结果数据
func (s *GenStruct) SetStructName(name string) { func (s *GenStruct) SetStructName(name string) {
s.Name = name s.Name = name
} }
//设置注释 //SetNotes 设置注释
func (e *GenStruct) SetNotes(notes string) { func (s *GenStruct) SetNotes(notes string) {
e.Notes = notes s.Notes = notes
} }
//添加一个/或多个元素 //AddElement 添加一个/或多个元素
func (s *GenStruct) AddElement(e ...GenElement) { func (s *GenStruct) AddElement(e ...GenElement) {
s.Em = append(s.Em, e...) s.Em = append(s.Em, e...)
} }
//获取结果数据 //Generate 获取结果数据
func (s *GenStruct) Generate() []string { func (s *GenStruct) Generate() []string {
var p PrintAtom var p PrintAtom
if !config.GetSimple() { if !config.GetSimple() {
p.Add("/******sql******") p.Add("/******sql******")
p.Add(s.SqlBuildStr) p.Add(s.SQLBuildStr)
p.Add("******sql******/") p.Add("******sql******/")
} }
p.Add("//", s.Notes) p.Add("//", s.Notes)
@@ -108,12 +108,12 @@ func (s *GenStruct) Generate() []string {
// package // package
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//定义包名 //SetPackage 定义包名
func (p *GenPackage) SetPackage(pname string) { func (p *GenPackage) SetPackage(pname string) {
p.Name = pname p.Name = pname
} }
//通过类型添加import //AddImport 通过类型添加import
func (p *GenPackage) AddImport(imp string) { func (p *GenPackage) AddImport(imp string) {
if p.Imports == nil { if p.Imports == nil {
p.Imports = make(map[string]string) p.Imports = make(map[string]string)
@@ -121,12 +121,12 @@ func (p *GenPackage) AddImport(imp string) {
p.Imports[imp] = imp p.Imports[imp] = imp
} }
//添加一个结构体 //AddStruct 添加一个结构体
func (p *GenPackage) AddStruct(st GenStruct) { func (p *GenPackage) AddStruct(st GenStruct) {
p.Structs = append(p.Structs, st) p.Structs = append(p.Structs, st)
} }
//获取结果数据 //Generate 获取结果数据
func (p *GenPackage) Generate() string { func (p *GenPackage) Generate() string {
p.genimport() //补充 import p.genimport() //补充 import

View File

@@ -1,6 +1,6 @@
package generate package generate
//包类 //IPackage 包类
type IPackage interface { type IPackage interface {
//定义包名 //定义包名
SetPackage(string) SetPackage(string)
@@ -12,7 +12,7 @@ type IPackage interface {
Generate() string Generate() string
} }
//结构体类 //IStruct 结构体类
type IStruct interface { type IStruct interface {
//设置创建语句,备份使用 //设置创建语句,备份使用
SetCreatTableStr(string) SetCreatTableStr(string)
@@ -30,7 +30,7 @@ type IStruct interface {
Generate() []string Generate() []string
} }
//元素类 //IElement 元素类
type IElement interface { type IElement interface {
//设置元素名字 //设置元素名字
SetName(string) SetName(string)
@@ -51,7 +51,7 @@ type IElement interface {
// //
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//元素类 //GenElement 元素类
type GenElement struct { type GenElement struct {
Name string //元素名 Name string //元素名
Type string //类型标记 Type string //类型标记
@@ -59,15 +59,15 @@ type GenElement struct {
Tags map[string][]string //标记 Tags map[string][]string //标记
} }
//结构体 //GenStruct 结构体
type GenStruct struct { type GenStruct struct {
SqlBuildStr string //创建sql语句 SQLBuildStr string //创建sql语句
Name string //名字 Name string //名字
Notes string //注释 Notes string //注释
Em []GenElement //元素组合 Em []GenElement //元素组合
} }
//包体 //GenPackage 包体
type GenPackage struct { type GenPackage struct {
Name string //名字 Name string //名字
Imports map[string]string //元素组合 Imports map[string]string //元素组合
@@ -77,12 +77,14 @@ type GenPackage struct {
//间隔 //间隔
var _interval = "\t" var _interval = "\t"
//EImportsHead .
var EImportsHead = map[string]string{ var EImportsHead = map[string]string{
"stirng": `"string"`, "stirng": `"string"`,
"time.Time": `"time"`, "time.Time": `"time"`,
"gorm.Model": `"github.com/jinzhu/gorm"`, "gorm.Model": `"github.com/jinzhu/gorm"`,
} }
//PrintAtom .
type PrintAtom struct { type PrintAtom struct {
lines []string lines []string
} }

View File

@@ -10,7 +10,7 @@ import (
"github.com/xxjwxc/public/tools" "github.com/xxjwxc/public/tools"
) )
//开始执行 //Execute 开始执行
func Execute() { func Execute() {
orm := mysqldb.OnInitDBOrm(config.GetMysqlConStr()) orm := mysqldb.OnInitDBOrm(config.GetMysqlConStr())