最近在使用mybatis-plus
的时候有时候需要增加一个表并且添加相关的实体、Mapper
和xml
文件的时候,比较麻烦。虽然官方也提供了IDEA
插件(mybatisx
)可以很方便的生成相关文件,但是一颗造轮子的心躁动不安,打算自己整一个逆向工具。
先向大家展示下我的造的轮子:mp-reverse
这个命令行工具主要分为下面几个部分:
Mapper
和xml
文件,(这里考虑到实现简单并且尽量减少依赖使用并没有使用模板引擎进行实现)整个项目使用一些基础的依赖包
[dependencies]
# json解析
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
# 命令行颜色
colored = "2.0.0"
# 时间格式化
chrono = "0.4.19"
# 数据库连接
mysql = "22.1.0"
接着看一下工具的配置文件格式(现在支持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"
}
}
│ 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 # 工具方法
执行命令: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
展示一下其中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>