Code Monkey home page Code Monkey logo

converter's Introduction

a lib for golang , generate mysql table schema to golang struct

mysql表结构自动生成golang struct

github地址

https://github.com/gohouse/converter

安装

  1. 直接下载可执行文件: 下载地址
  2. golang源码包: go get github.com/gohouse/converter

示例表结构

CREATE TABLE `prefix_user` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱',
  `Password` varchar(32) NOT NULL DEFAULT '' COMMENT '密码',
  `CreatedAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'

命令行用法

  1. 下载对应平台的可执行文件, 下载地址

  2. 命令行执行

    # 文件名: table2struct-[$platform].[$version].[$suffix]
    ./table2struct-linux.v0.0.3.bin -file model.go -dsn xxx -table user
  3. 参数说明

-dsn            string 数据库dsn配置
-enableJsonTag  bool 是否添加json的tag
-file           string 保存路径
-packageName    string 包名
-prefix         string 表前缀
-realNameMethod string 结构体对应的表名
-table          string 要迁移的表
-tagKey         string tag的key

golang代码简单用法

package main
import (
	"fmt"
	"github.com/gohouse/converter"
)
func main() {
	err := converter.NewTable2Struct().
		SavePath("/home/go/project/model/model.go").
		Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
		Run()
	fmt.Println(err)
}

golang代码详细用法示例

package main

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

func main() {
	// 初始化
	t2t := converter.NewTable2Struct()
	// 个性化配置
	t2t.Config(&converter.T2tConfig{
		// 如果字段首字母本来就是大写, 就不添加tag, 默认false添加, true不添加
		RmTagIfUcFirsted: false,
		// tag的字段名字是否转换为小写, 如果本身有大写字母的话, 默认false不转
		TagToLower: false,
		// 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
		UcFirstOnly: false,
		//// 每个struct放入单独的文件,默认false,放入同一个文件(暂未提供)
		//SeperatFile: false,
	})
	// 开始迁移转换
	err := t2t.
		// 指定某个表,如果不指定,则默认全部表都迁移
		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/model.go").
		// 数据库dsn,这里可以使用 t2t.DB() 代替,参数为 *sql.DB 对象
		Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
		// 执行
		Run()
	
	fmt.Println(err)
}

result

package model

import "time"

type User struct {
	Id         int     `json:"Id" orm:"Id"`
	Email      string  `json:"Email" orm:"Email"`           // 邮箱
	Password   string  `json:"Password" orm:"Password"`     // 密码
	CreatedAt  string  `json:"CreatedAt" orm:"CreatedAt"`
}

func (*User) TableName() string {
	return "user"
}

converter's People

Contributors

ainilili avatar fizzday avatar hl-lab avatar zhlicen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

converter's Issues

关于源码和下载下来的不一样

github上直接查看源码配置项里面有这几个参数

type T2tConfig struct {
	StructNameToHump bool // 结构体名称是否转为驼峰式,默认为false
	RmTagIfUcFirsted bool // 如果字段首字母本来就是大写, 就不添加tag, 默认false添加, true不添加
	TagToLower       bool // tag的字段名字是否转换为小写, 如果本身有大写字母的话, 默认false不转
	JsonTagToHump    bool // json tag是否转为驼峰,默认为false,不转换
	UcFirstOnly      bool // 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
	SeperatFile      bool // 每个struct放入单独的文件,默认false,放入同一个文件
}

但是我安装最新的版本的时候配置项目参数只有这几个

type T2tConfig struct {
	RmTagIfUcFirsted bool // 如果字段首字母本来就是大写, 就不添加tag, 默认false添加, true不添加
	TagToLower       bool // tag的字段名字是否转换为小写, 如果本身有大写字母的话, 默认false不转
	UcFirstOnly      bool // 字段首字母大写的同时, 是否要把其他字母转换为小写,默认false不转换
	SeperatFile      bool // 每个struct放入单独的文件,默认false,放入同一个文件
}

phinxlog表名被转换成了nxlog

设置了prefix=oc_

有一张表记录migration的没有oc_这个prefix

于是被转换成了nxlog

建议在转换的时候给出提示,是否跳过不生成model,是否数据表错误

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.