查询数据库表的信息sql,这边主要是用来查询表的信息:
select * from information_schema.TABLES where TABLE_SCHEMA='[数据库名]'
查询数据库表的字段元数据信息sql:
show full columns from [数据库名].[表名]
查询结果:
Field(字段名) Type(字段类型) Collation NULL(能否为空) Key(是否主键) Default(默认值) Extra Privilege Comment(注释)
读取ini配置文件的工具:https://ini.unknwon.io/docs/intro/getting_started
配置信息保存路径:reverse/config.ini
支持三类配置:
[database] //数据库配置
[common] //通用配置
[type_mapping] //类型映射
按照对应格式进行配置,如果没有找到对应配置则使用数据库通用配置
可拓展支持三个接口
ContentGenerate:文件内容拼接
DbConnection: 数据库支持
ReverseCheck: 校验支持
在Engine中通过以下三个方法实现配置
func SetContentGenerate
func SetDbConnection
func SetReverseCheck
/**
* 传入表名和生成路径,数据库名和是否覆盖按照配置文件获取
*/
SimpleEngineer(tableName string, path string)
/**
* 传入表名、生成路径和是否覆盖,数据库名读取配置
*/
func (r *DataReverseEngine) SimEngineer(tableName string, path string, cover bool)
/**
* 传入表名、生成路径和是否覆盖、数据库名
*/
func (*DataReverseEngine) Engineer(dbName string, tableName string, path string, cover bool)
[database] //数据库配置
username = 我的数据库账号
password = 我的数据库密码
tcp = @tcp
ip = 我的数据库机器Ip
port = 3306
database = 我的数据库名
charset = utf8mb4&parseTime=True&loc=Local
connMaxLifeTime = 100
maxIdleConns = 10
[common] //通用配置
def = string //默认的映射类型
tagKey = xorm //tag的key
suffix = .go //文件后缀
cover = true //存在文件是否进行覆盖,只有配置为false的时候不会覆盖,其他默认为true
[type_mapping] //类型映射
double = float64
float = float64
int = int
tinyint = int
bigint = int
time = time.Time
timestamp = time.Time
date = time.Time
dateTime = time.Time
//使用相对路径
e := reverse.NewEngine()
e.Engineer("数据库名字", "表名", "filepath", true)
//使用绝对路径
e := reverse.NewEngine()
e.SetReverseCheck(&support.CheckPathSupport{})
e.Engineer("数据库名字", "表名", "F:/self_project/src/ReverseEngine/filepath", true)
1.数据库连接是通过最原始的方式进行,这边后期可以修改成xorm或者其他的orm框架方式
2.读写文件的方法可以做相应的修改,这边也是采用最原生的方式
直接运行Main.go方法,在控制台根据提示输入对应的数据库名、表名、生成位置、文件存在是否覆盖等参数来达到直接调用函数使用生成的目的 一次生成结束提示输入Y即可结束程序
启动时通过panicStop
参数输入,控制程序报错不停止,除非在提示结束的时候输入Y.
在config.ini中配置你的数据库信息,最好修改Engine中默认的数据库信息,因为这边的数据库信息都是我乱写的
通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到
查阅了网上提供的处理方式,通过设置GOPATH 和Go Modules(vgo)可以解决相应的问题,但是我在这样处理之后依然会出现报红的问题
后面通过使用vendor包的方式来处理,就避免了报红的问题
处理步骤如下 :
- 通过 go get github.com/kardianos/govendor 命令下载govendor命令
- 通过 go mod vendor 切换到vendor管理