java实现的开源mocker造数神器,10分钟可完成千万级别数据的造数-入门篇
如果你还在为数据库表造数烦恼?如果你还在造数上花费一天、一周、甚至更多的时间……也许Mocker(模客)能帮你排忧解难。
造数是一件令人头疼、繁琐而又无趣的事情,但有些时候它又是开发过程中不可避免的一个阶段。
我们常用的造数方法
- 少量数据也许可以通过人工手动一行一行造
- 稍微多一点要做个excel工具进行数据模拟并导入
- 数据量再大一点可能就得写脚本(如python等)来造数
以上这些方式一般来说都需要一定的时间成本投入,为了杜绝这种不必要的开发时间成本浪费,Mocker因此而生。
Mocker本着你写逻辑我造数原则服务于你的造数需求,百万级别数据量造数不再需要一天、一周甚至更多的时间,Mocker只需要10分钟甚至更少。
待模拟数据表结构
CREATE TABLE `mk_user` (
`id` bigint(18) NOT NULL AUTO_INCREMENT COMMENT '主键自增长',
`user_name` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '账户名称',
`password` varchar(55) DEFAULT NULL COMMENT '账户密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
引入maven依赖
<dependency>
<groupId>io.gitee.jaemon</groupId>
<artifactId>mocker</artifactId>
<version>1.1.0</version>
</dependency>
- 1.
- 2.
- 3.
- 4.
- 5.
Mocker配置文件
# 数据库配置
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mockdb?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=root
- 1.
- 2.
- 3.
- 4.
- 5.
Mocker配置文件路径: resources/mocker.properties
执行字段值生成处理类生成程序
public class MockerApp {
public static void main(String[] args) {
// 生成表字段值生成处理类
DataMockStarter.generate("/home/jaemon/mocker");
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
运行程序,在/home/jaemon/mocker路径下会生成 MockdbColumnHandlerEnum枚举类文件,文件内容如下
public enum MockdbColumnHandlerEnum implements TableColumnsHandler {
// mk_user-账户名称-varchar(55)
USER_NAME {
@Override
public String generate(String tableName, Map<String, Object> values) {
return null;
}
},
// mk_user-账户密码-varchar(55)
PASSWORD {
@Override
public String generate(String tableName, Map<String, Object> values) {
return null;
}
};
MockdbColumnHandlerEnum() {}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
编写MockdbColumnHandlerEnum枚举类字段值生成逻辑
public enum MockdbColumnHandlerEnum implements TableColumnsHandler {
// mk_user-账户名称-varchar(55)
USER_NAME {
@Override
public String generate(String tableName, Map<String, Object> values) {
return RandomUtils.randomCNName();
}
},
// mk_user-账户密码-varchar(55)
PASSWORD {
@Override
public String generate(String tableName, Map<String, Object> values) {
return RandomUtils.generateCharNums(8);
}
};
MockdbColumnHandlerEnum() {}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
执行数据模拟程序
public class MockerApp {
public static void main(String[] args) {
// 模拟数据库表数据生成
DataMockStarter.mock(MockdbColumnHandlerEnum.class);
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
源码地址