Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate multiple files #17

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,15 @@ func main() {
TagToLower: false,
// 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
UcFirstOnly: false,
//// 每个struct放入单独的文件,默认false,放入同一个文件(暂未提供)
//SeperatFile: false,
// 每个struct放入单独的文件,默认false,放入同一个文件,true 单文件
SeperatFile: true,
})
// 开始迁移转换
err := t2t.
// 指定某个表,如果不指定,则默认全部表都迁移
Table("user").
// Table("user").
// 表前缀
Prefix("prefix_").
// Prefix("prefix_").
// 是否添加json tag
EnableJsonTag(true).
// 生成struct的包名(默认为空的话, 则取名为: package model)
Expand All @@ -94,8 +94,9 @@ func main() {
TagKey("orm").
// 是否添加结构体方法获取表名
RealNameMethod("TableName").

// 生成的结构体保存路径
SavePath("/Users/fizz/go/src/github.com/gohouse/gupiao/model/model.go").
SavePath("/Users/fizz/go/src/github.com/gohouse/gupiao/model").
// 数据库dsn,这里可以使用 t2t.DB() 代替,参数为 *sql.DB 对象
Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
// 执行
Expand Down
2 changes: 1 addition & 1 deletion cmd/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func parser() {
// 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
UcFirstOnly: false,
//// 每个struct放入单独的文件,默认false,放入同一个文件(暂未提供)
//SeperatFile: false,
SeperatFile: true,
})
// 开始迁移转换
err := t2t.
Expand Down
32 changes: 30 additions & 2 deletions examples/t2t.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,39 @@ import (
)

func main() {
// 初始化
t2t := converter.NewTable2Struct()

// 个性化配置
t2t.Config(&converter.T2tConfig{
// 如果字段首字母本来就是大写, 就不添加tag, 默认false添加, true不添加
RmTagIfUcFirsted: false,
// tag的字段名字是否转换为小写, 如果本身有大写字母的话, 默认false不转
TagToLower: false,
// 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
UcFirstOnly: false,
// 每个struct放入单独的文件,默认false,放入同一个文件,true 单文件
SeperatFile: true,
})
// 开始迁移转换
err := t2t.
SavePath("/home/go/project/model/model.go").
// 指定某个表,如果不指定,则默认全部表都迁移
Table("user").
// 表前缀
Prefix("prefix_").
// 是否添加json tag
EnableJsonTag(true).
// 生成struct的包名(默认为空的话, 则取名为: package model)
PackageName("model").
// tag字段的key值,默认是orm
TagKey("orm").
// 是否添加结构体方法获取表名
RealNameMethod("TableName").
// 生成的结构体保存路径
SavePath("/Users/fizz/go/src/github.com/gohouse/gupiao/model/").
// 数据库dsn,这里可以使用 t2t.DB() 代替,参数为 *sql.DB 对象
Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
// 执行
Run()

fmt.Println(err)
}
9 changes: 6 additions & 3 deletions migration/artisan.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package main

/*
import (
"fmt"

"github.com/gohouse/gorose"
)

Expand All @@ -18,6 +20,7 @@ var err error
func init() {
}
func main() {
conn,err = gorose.Open("mysql", "gcore:gcore@tcp(192.168.200.248:3306)/test?charset=utf8")
fmt.Println(conn,err)
}
conn, err = gorose.Open("mysql", "gcore:gcore@tcp(192.168.200.248:3306)/test?charset=utf8")
fmt.Println(conn, err)
}
*/
51 changes: 49 additions & 2 deletions table2struct.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ import (
"log"
"os"
"os/exec"
"path/filepath"
"strings"

_ "github.com/go-sql-driver/mysql"
)

//map for converting mysql type to golang types
// map for converting mysql type to golang types
var typeForMysqlToGo = map[string]string{
"int": "int64",
"integer": "int64",
Expand Down Expand Up @@ -184,7 +185,13 @@ func (t *Table2Struct) Run() error {
*/
tableName = t.camelCase(tableName)
depth := 1
structContent += "type " + structName + " struct {\n"

if t.config.SeperatFile {
structContent = "type " + structName + " struct {\n"
} else {
structContent += "type " + structName + " struct {\n"
}

for _, v := range item {
//structContent += tab(depth) + v.ColumnName + " " + v.Type + " " + v.Json + "\n"
// 字段注释
Expand All @@ -205,8 +212,18 @@ func (t *Table2Struct) Run() error {
tab(depth), tableRealName)
structContent += "}\n\n"
}
// 开启单表单文件保存 文件名为表名
if t.config.SeperatFile {

saveResult(packageName, structContent, t, tableRealName)
}
}

if t.config.SeperatFile {
log.Println("gen model finish!!!")
return nil
}

// 如果有引入 time.Time, 则需要引入 time 包
var importContent string
if strings.Contains(structContent, "time.Time") {
Expand All @@ -224,6 +241,10 @@ func (t *Table2Struct) Run() error {
if savePath == "" {
savePath = "model.go"
}

if fi, e := os.Stat(savePath); e == nil && fi.IsDir() {
savePath = filepath.Join(savePath, "model.go")
}
filePath := fmt.Sprintf("%s", savePath)
f, err := os.Create(filePath)
if err != nil {
Expand Down Expand Up @@ -371,3 +392,29 @@ func (t *Table2Struct) camelCase(str string) string {
func tab(depth int) string {
return strings.Repeat("\t", depth)
}

func saveResult(packageName string, structContent string, t *Table2Struct, fileName string) error {
// 如果有引入 time.Time, 则需要引入 time 包
var importContent string
if strings.Contains(structContent, "time.Time") {
importContent = "import \"time\"\n\n"
}

// 写入文件struct
var savePath = t.savePath
// 是否指定保存路径
savePath = filepath.Join(savePath, fileName+".go")
filePath := fmt.Sprintf("%s", savePath)
f, err := os.Create(filePath)
if err != nil {
log.Println("Can not write file")
return err
}
defer f.Close()

f.WriteString(packageName + importContent + structContent)

cmd := exec.Command("gofmt", "-w", filePath)
cmd.Run()
return nil
}
58 changes: 58 additions & 0 deletions test/generate_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package test

import (
"fmt"
"testing"
"github.com/gohouse/converter"
)

func TestGenerateTest(t *testing.T) {
// 初始化
t2t := converter.NewTable2Struct()
// 个性化配置
t2t.Config(&converter.T2tConfig{
// 如果字段首字母本来就是大写, 就不添加tag, 默认false添加, true不添加
RmTagIfUcFirsted: false,
// tag的字段名字是否转换为小写, 如果本身有大写字母的话, 默认false不转
TagToLower: false,
// 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
UcFirstOnly: true,
//// 每个struct放入单独的文件,默认false,放入同一个文件
SeperatFile: false,
// struct 转驼峰命名,默认false
StructNameToHump: true,
// json tag是否转为驼峰,默认为false,不转换
JsonTagToHump: true,
})


// 开始迁移转换
err := t2t.
// 指定某个表,如果不指定,则默认全部表都迁移
// Table("user").
// 表前缀
// Prefix("prefix_").
// 是否添加json tag

EnableJsonTag(true).


// 日期类型
DateToTime(true).

// 生成struct的包名(默认为空的话, 则取名为: package model)
PackageName("models").
// tag字段的key值,默认是orm
TagKey("orm").
// 是否添加结构体方法获取表名
RealNameMethod("TableName").
// 生成的结构体保存路径
SavePath("E:\\golang\\rui_ji\\models").
// SavePath("E:\\golang\\rui_ji\\models").
// 数据库dsn,这里可以使用 t2t.DB() 代替,参数为 *sql.DB 对象
Dsn("root:1233211234567@tcp(localhost:3306)/reggie?charset=utf8").
// 执行
Run()

fmt.Println(err)
}