1.引入依赖
com.ehaomiao
ehm-common-generation
2.在需要生成代码包下随便创建一个java文件 配置表名 作者名 表前缀名
public static void main(String[] args) {
new GenerationFactory()
.table("mv_behavior_alarm_log",
"mv_motor_commodity_alarm_log",
"mv_absence_alarm_log")
.author("xzj")
.tablePrefix("mv_")
.build();
}
3.运行程序后会在同级目录下生成 controller、mapper.java、mapper.xml、service、serviceImpl、entity文件
原理解析:
1.获取调用方所在项目路径
//获取项目所在路径
String jarWholePath = Thread.currentThread()
.getContextClassLoader()
.getResource("./")
.getPath();
String jarPath = new File(jarWholePath)
.getParentFile()
.getParentFile()
.getAbsolutePath();
2.获取调用方所在包名
//获取包名
String packageName = null;
try {
packageName = Class.forName(Thread.currentThread().getStackTrace()[2].getClassName()).getPackage().getName();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//父包名称
StringBuilder parentName = new StringBuilder();
//模块名称
String moduleName = "";
//包名不为null
if (packageName != null) {
String[] split = packageName.split("\\.");
//父包名称
for (int i = 0; i < split.length - 1; i++) {
parentName.append(split[i]).append(".");
}
if (parentName.length() > 0) {
parentName.deleteCharAt(parentName.length() - 1);
}
moduleName = split[split.length - 1];
}
3.获取调用方资源文件下application.yml 配置数据库资源
spring:
datasource:
dynamic:
datasource:
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.165:4406/ehm_cloud_data_center?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
//从yml文件中读取连接数据库地址 用户名 密码
Yaml yaml = new Yaml();
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.yml");
Map map = yaml.loadAs(in, Map.class);
Map master =
(Map) ((Map) ((Map) ((Map) ((Map)
map.get("spring")).get("datasource")).get("dynamic")).get("datasource")).get("master");
String url = master.get("url").toString();
String username = master.get("username").toString();
String password = master.get("password").toString();
4.调用mybatis plus 方法 生成代码,模块resources下自定义entity.java.ftl、 controller.java.ftl 模板
//mybatis plus 方法
String finalModuleName = moduleName;
FastAutoGenerator.create(url,
username,
password)
.globalConfig(builder -> {
builder.author(author) // 设置作者
.fileOverride() // 覆盖已生成文件
.outputDir(jarPath + "/src/main/java"); // 指定输出目录
})
//包名配置,这个配置指/src/main/java下开始的包路径
.packageConfig(builder -> {
builder.parent(parentName.toString()) // 设置父包名
.moduleName(finalModuleName) // 设置父包模块名
.xml("mapper.mapping");
})
//策略配置
.strategyConfig(builder -> {
builder.addInclude(table) // 设置需要生成的表名
.addTablePrefix(tablePrefix)
//自定义配置继承父包 HmBaseMapper 此类为我们公司扩展类
.mapperBuilder()
.superClass(HmBaseMapper.class)
.build()
//实体类配置
.entityBuilder()
.enableLombok()
.enableChainModel()
.enableTableFieldAnnotation()
//继承父类,忽略父类公共字段
.superClass(BaseEntity.class)
.addIgnoreColumns("create_time", "create_by", "update_time", "update_by")
.build()
//service配置
.serviceBuilder()
.superServiceClass(IHmService.class)
.superServiceImplClass(HmServiceImpl.class)
.build();
})
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
//自定义模板
.templateConfig(builder -> {
builder.entity("/templates/entity.java")
.controller("/templates/controller.java")
.build();
})
.execute();
}