selfImprHuang / ReverseEngine

数据库逆向工程工具

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

##我的公众号

查询命令记录

查询数据库表的信息sql,这边主要是用来查询表的信息:
    select * from information_schema.TABLES where TABLE_SCHEMA='[数据库名]'

查询数据库表的字段元数据信息sql:
    show full columns from [数据库名].[表名]
查询结果:
        Field(字段名) Type(字段类型) Collation NULL(能否为空) Key(是否主键) Default(默认值) Extra Privilege Comment(注释)

使用ini配置文件读取工具

读取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中默认的数据库信息,因为这边的数据库信息都是我乱写的

mod vendor模式加载包

通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到

查阅了网上提供的处理方式,通过设置GOPATH 和Go Modules(vgo)可以解决相应的问题,但是我在这样处理之后依然会出现报红的问题

后面通过使用vendor包的方式来处理,就避免了报红的问题

处理步骤如下 :

  • 通过 go get github.com/kardianos/govendor 命令下载govendor命令
  • 通过 go mod vendor 切换到vendor管理

About

数据库逆向工程工具


Languages

Language:Go 100.0%