• 用Rust开发一个mybatis的逆向工具


    Rust命令行工具开发实战

    一、简述

    最近在使用mybatis-plus的时候有时候需要增加一个表并且添加相关的实体、Mapperxml文件的时候,比较麻烦。虽然官方也提供了IDEA插件(mybatisx)可以很方便的生成相关文件,但是一颗造轮子的心躁动不安,打算自己整一个逆向工具。

    先向大家展示下我的造的轮子:mp-reverse

    在这里插入图片描述

    二、整体结构

    这个命令行工具主要分为下面几个部分:

    • 命令行参数的解析
    • 配置文件解析并读取相关的表和表的结构
    • 生成实体、Mapperxml文件,(这里考虑到实现简单并且尽量减少依赖使用并没有使用模板引擎进行实现)

    整个项目使用一些基础的依赖包

    [dependencies]
    # json解析
    serde_json = "1.0"  
    serde = { version = "1.0", features = ["derive"] }
    # 命令行颜色
    colored = "2.0.0"
    # 时间格式化
    chrono = "0.4.19"
    # 数据库连接
    mysql = "22.1.0"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    接着看一下工具的配置文件格式(现在支持Json格式)

    {
      "package_path": "com.example.demo",  # 项目主包
      "pass_print": false,
      "database": {   # 数据库配置
        "address": "127.0.0.1",
        "port": 3306,
        "username": "root",
        "password": "123456",
        "database": "test",
        "is_all": false,  # 是否逆向完整的数据库
        "table_name": ["t_user", "t_address"],  # 逆向指定的表
        "table_prefix": "t_"  # 表前缀
      },
      "entity": {  # 实体配置
        "primary_key_type": "AUTO",  # 主键生成策略
        "entity_path": "com.example.demo.entity",  # 实体包路径
        "use_lombok": true,
        "time_format": "2022-08-3 23:22:11",
        "time_zone": "GM+8"
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    三、代码结构

    │  Cargo.lock
    │  Cargo.toml                         # cargo依赖管理
    │  config.json                        # 配置文件
    │
    └─src
        │  lib.rs                         # 整合其他包
        │  main.rs
        ├─builder
        │      entity_builder.rs          # 实体类构建
        │      mapper_builder.rs          # mapper构建
        │      mod.rs                     
        │      xml_builder.rs             # xml构建
        ├─config
        │      mod.rs                     # 配置文件解析
        │
        ├─database
        │      mod.rs                     # 数据库连接
        ├─flag
        │      mod.rs                     # 参数解析
        ├─transform
        │      mod.rs                     # 类型转换
        └─utils
               mod.rs                     # 工具方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    四、逆向展示

    执行命令:mp-reverse -a demo -p F:\temp -f F:\temp\config.json

    在这里插入图片描述

    接着我们在指定目录中查看

    │  config.json            # 配置文件
    │
    ├─Order                  
    │      Order.java         # 实体  
    │      OrderMapper.java   # mapper文件
    │      OrderMapper.xml    # xml文件
    │
    └─Product
            Product.java
            ProductMapper.java
            ProductMapper.xml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    展示一下其中xml文件吧

    
    DOCTYPE builder PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-builder.dtd">
    <mapper namespace="com.example.demo.mapper.OrderMapper">
    	
    	<resultMap id="BaseResultMap" type="com.example.demo.entity.Order">
    		<id column="id" property="id" />
    		<result column="order_num" property="orderNum" />
    		<result column="order_title" property="orderTitle" />
    		<result column="merchant_id" property="merchantId" />
    		<result column="order_type" property="orderType" />
    		<result column="product_id" property="productId" />
    	resultMap>
    	
    	<sql id="Base_Column_List">
    		id,order_num,order_title,merchant_id,order_type,product_id
    	sql>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    五、代码仓库

    mybatis-plus-reverse

  • 相关阅读:
    Ribbon实现Cloud负载均衡
    Qt实现厨房值班员的显示模块,如何做到时间到达0:00更新显示
    java并发编程学习四——ReentrantLock使用
    Cy5.5-PEG-N3,Cy5.5-聚乙二醇-叠氮,azide/N3/叠氮-PEG-Cy5.5
    C嘎嘎~~[类 中篇]
    智慧城市解决方案典型应用
    物体分类__pytorch
    python3 学习记录 字符串处理
    广州华锐互动:办税服务厅税务登记VR仿真体验让税务办理更加灵活高效
    大一新生如何选电脑?专业不同,需求不同
  • 原文地址:https://blog.csdn.net/yhflyl/article/details/126329199