用这个可以少写一点无用的代码!

相信大家在开发的过程中会去编写一些数据库表对应的model,工作比较重复并且低效,本文将介绍笔者写的一个工具可以根据数据库表生产对应的model逆向工程工具。

  • 可以帮忙点一个star✨谢谢!!!
  • https://github.com/higker/s2s

什么是s2s

s2s (sql to structure)是一款命令行数据库逆向工程工具,它可以通过数据库表生成对应的JavaGoRust结构体(class),后面将陆续支持更多的语言。

配置数据库源

s2s依赖于你的数据库,所以需要你配置好你的数据库连接信息,以便s2s会正常的运行。配置信息方法很简单你只需要在你的环境变量中加入以下信息即可。

推荐使用开发环境的下的root用户登录,因为工具需要information_schema表的权限。

#s2s 命令的数据库信息
export s2s_host="127.0.0.1:3306"
export s2s_user="root"
export s2s_pwd="you db password"
export s2s_charset="utf8"

windows的配置此电脑->属性->高级系统设置->环境变量MacLinux则在~/.profile或者~/.zshrc中添加以上配置信息即可。

使用方法

  1. 你可以克隆下载本代码库,然后如果你的电脑上已经安装好了go的编译器那么就进入主目录即可使用go build命令编译生成二进制程序文件。

  2. 如果你觉得麻烦即可在下面列表中找到你对应的平台架构下载对应的二进制可执行文件到电脑上,如果你想在系统上随意调用你则只需要把s2s的安装目录放入你的环境变量中。

  3. 目前对Rust部分数据类型支持不够友好,不过不耽误使用,目前被生成的数据库表名格式必须为user_info这样的snake case这种格式!!后面会考虑修复这个bug

平台 地址
Windows-x64 s2s-windows-x64.zip
Mac-x64 s2s-darwin-x64.zip
Linux-64 s2s-linux-x64.zip

内置命令

PS: 在命令行模式下按下tab键会有命令补全提示!

命令 使用方法
databases 显示所有数据库名
use 指定使用哪个数据库
tables 显示当前数据库所有表
gen 生成指定的表,gen 表名
info 显示数据库所有信息
exit 退出命令行模式
clear 清理屏幕内容

使用案例

$:> s2s java

         ______
 .-----.|__    |.-----.
 |__ --||    __||__ --|
 |_____||______||_____|



🥳: You have entered the command line mode!

🥳: Press the 'tab' key to get a prompt!

🥳: Enter `exit` to exit the program!

😃:s2s>databases
+---+--------------------+
| * | Database           |
+---+--------------------+
1 | information_schema |
2 | emp_db             |
3 | mysql              |
4 | performance_schema |
5 | sys                |
6 | test_db            |
+---+--------------------+


😃:s2s>use emp_db

🤖‍: Selected as database 👉 `emp_db`!

😃:s2s>tables
+---+-----------+
| * | Tables    |
+---+-----------+
1 | user_info |
+---+-----------+


😃:s2s>gen user_info

 package model


 import java.sql.Timestamp;

 import java.math.BigDecimal;

 import java.math.BigInteger;


 public class UserInfo {


      // 用户账号
      private String Account;

      // 用户创建时间
      private Timestamp CreateTime;

      // 用户更新时间
      private Timestamp UpdatedDate;

      // 用户年龄
      private short Age;

      // 用户余额
      private BigDecimal Money;

      // 用户ID
      private BigInteger Uid;


      public String getAccount() {
          return Account;
      }

      public void setAccount(String Account) {
          this.Account = Account;
      }

      public Timestamp getCreateTime() {
          return CreateTime;
      }

      public void setCreateTime(Timestamp CreateTime) {
          this.CreateTime = CreateTime;
      }

      public Timestamp getUpdatedDate() {
          return UpdatedDate;
      }

      public void setUpdatedDate(Timestamp UpdatedDate) {
          this.UpdatedDate = UpdatedDate;
      }

      public short getAge() {
          return Age;
      }

      public void setAge(short Age) {
          this.Age = Age;
      }

      public BigDecimal getMoney() {
          return Money;
      }

      public void setMoney(BigDecimal Money) {
          this.Money = Money;
      }

      public BigInteger getUid() {
          return Uid;
      }

      public void setUid(BigInteger Uid) {
          this.Uid = Uid;
      }


      @Override
      public String toString() {
        return "user_info{" +

            "Account=" + Account + ","+

            "CreateTime=" + CreateTime + ","+

            "UpdatedData=" + UpdatedDate + ","+

            "Age=" + Age + ","+

            "Money=" + Money + ","+

            "Uid=" + Uid + ","+

            "}";
      }
 }

😃:s2s>exit

🤖‍: Bye👋 :)

导入包

本库支持你二次开发使用,你只需要导入本包即可在你的代码中进行扩充开发,但是目前仅支持go语言!

  1. 下载
go get -u github.com/higker/s2s
  1. 导入并且使用
package main

import (
    "github.com/higker/s2s/core/lang/java"
    "github.com/higker/s2s/core/db"
)


func main() {

      // 创建一个Java的代码生成器
      structure := java.New()

      // 数据库连接信息
      if err := structure.OpenDB(
            &db.Info{
                HostIPAndPort: os.Getenv("s2s_host"), // 数据库IP
                UserName:      os.Getenv("s2s_user"), // 数据库用户名
                Password:      os.Getenv("s2s_pwd"),  // 数据库密码
                Type:          db.MySQL,              // 数据库类型 PostgreSQL Oracle
                Charset:       os.Getenv("s2s_charset"),
            },
      ); err != nil {
            // Failed to establish a connection to the database!
            // .... logic code
      }

      defer structure.Close()

      structure.SetSchema("选择数据库名")

      // 实现了io.Writer即可
      structure.Parse(os.Stdout,"表名")

}

其他

目前仅支持mysql数据库,如果有想贡献代码提issues!跟多需求:1. 支持linux管道命令这样就可以可编程操作了,前面一个输出就是后面一个程序的输入。

  • 点击原文去仓库 https://github.com/higker/s2s

原文始发于微信公众号(TPaper):用这个可以少写一点无用的代码!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/23675.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!