当前位置: 首页 > news >正文

【java】mybatis-plus代码生成

正常的代码生成这里就不介绍了。旨在记录实现如下功能:

分布式微服务环境下,生成的entity、dto、vo、feignClient等等api模块,需要和mapper、service、controller等等分在不同的目录生成。

为什么会出现这个需求?
mybatis-plus(3.5.3.1)提供的全局配置:outputDir,该方法是entity、mapper、service、controller的文件输出目录。
如上,需要将entity和其他三个区分到不同的目录。
查看源码com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine

/*** 输出实体文件** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputEntity(TableInfo tableInfo, Map<String, Object> objectMap) {}/*** 输出Mapper文件(含xml)** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputMapper(TableInfo tableInfo, Map<String, Object> objectMap) {}/*** 输出service文件** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputService(TableInfo tableInfo, Map<String, Object> objectMap) {}/*** 输出controller文件** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputController(TableInfo tableInfo, Map<String, Object> objectMap) {}

一般都会集成自定义的文件生成,使用模板,一般的选择就是
在这里插入图片描述

上述的4个engine也就是继承了AbstractTemplateEngine,可根据自己选择的模板,再次集成,重写这4个方法:outputEntity outputMapper outputService outputController ,方法内部不需要执行相关代码, 输出的逻辑放在outputCustomFile方法内即可

源码:

@AllArgsConstructor
public class ByTemplateEngine extends BeetlTemplateEngine {private String apiOutputDir;private String serverOutputDir;@Overrideprotected void outputCustomFile(List<CustomFile> customFiles, TableInfo tableInfo, Map<String, Object> objectMap) {String packageName = String.valueOf(objectMap.get("packageName"));String entityName = String.valueOf(objectMap.get("entityName"));customFiles.forEach(customFile -> {String key = customFile.getFileName();String value = customFile.getTemplatePath();String outputPath = getPathInfo(OutputFile.parent);objectMap.put("entityKey", entityNameLower);if (StringUtil.equals(key, "controller.java")) {outputPath =serverOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"controller" + StringPool.SLASH + entityName + "Controller" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "entity.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"entity" + StringPool.SLASH + entityName + "Entity" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "mapper.java")) {outputPath =serverOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"mapper" + StringPool.SLASH + entityName + "Mapper" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "mapper.xml")) {outputPath =serverOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"mapper" + StringPool.SLASH + entityName + "Mapper" + StringPool.DOT_XML;}if (StringUtil.equals(key, "service.java")) {outputPath =serverOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"service" + StringPool.SLASH + "I" + entityName + "Service" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "serviceImpl.java")) {outputPath =serverOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"service" + StringPool.SLASH + "impl" + StringPool.SLASH + entityName + "ServiceImpl" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "entityVO.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"vo" + StringPool.SLASH + entityName + "VO" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "entityDTO.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"dto" + StringPool.SLASH + entityName + "DTO" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "entityExcel.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"excel" + StringPool.SLASH + entityName + "Excel" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "wrapper.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"wrapper" + StringPool.SLASH + entityName + "Wrapper" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "feign.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"feign" + StringPool.SLASH + "I" + entityName + "Client" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "feignclient.java")) {outputPath =serverOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH + "feign"+ StringPool.SLASH + entityName + "Client" + StringPool.DOT_JAVA;}if (StringUtil.equals(key, "feignclientFallback.java")) {outputPath = apiOutputDir + StringPool.SLASH + packageName.replace(StringPool.DOT, StringPool.SLASH) + StringPool.SLASH +"feign" + StringPool.SLASH + entityName + "ClientFallback" + StringPool.DOT_JAVA;}outputFile(new File(String.valueOf(outputPath)), objectMap, value, Boolean.TRUE);});}/*** 输出实体文件** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputEntity(TableInfo tableInfo, Map<String, Object> objectMap) {}/*** 输出Mapper文件(含xml)** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputMapper(TableInfo tableInfo, Map<String, Object> objectMap) {}/*** 输出service文件** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputService(TableInfo tableInfo, Map<String, Object> objectMap) {}/*** 输出controller文件** @param tableInfo 表信息* @param objectMap 渲染数据* @since 3.5.0*/@Overrideprotected void outputController(TableInfo tableInfo, Map<String, Object> objectMap) {}
}
http://www.lryc.cn/news/126365.html

相关文章:

  • 小样本UIE 信息抽取微调快速上手(不含doccona标注)
  • Vue项目(购物车)
  • 23.08.16驱动点灯
  • 数据结构——堆
  • 重复学习1:NLP
  • 做海外游戏推广有哪些条件?
  • JavaFx基础学习【五】:FXML布局文件使用
  • 通过Python爬虫提升网站搜索排名
  • 【博客698】为什么当linux作为router使用时,安装docker后流量转发失败
  • el-dialog嵌套,修改内层el-dialog样式(自定义样式)
  • B树和B+树区别
  • intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库
  • vfuhyuuy
  • CSS自学框架之表单
  • 使用Spring Boot和Redis实现用户IP接口限流的详细指南
  • 前端性能优化——包体积压缩插件,打包速度提升插件,提升浏览器响应的速率模式
  • 配置vscode
  • 【Spring】深入理解 Spring 事务及其传播机制
  • eclipse常用设置
  • ajax解析
  • CSS3:图片边框
  • (七)Unity VR项目升级至Vision Pro需要做的工作
  • 【计算机视觉|生成对抗】生成对抗网络(GAN)
  • 神经网络基础-神经网络补充概念-15-神经网络概览
  • iOS Epub阅读器改造记录
  • 负载均衡搭建
  • form表单input标签的23种type类型值?
  • python selenium如何保存网站的cookie用于下次自动登录
  • DHCP Server
  • DMR+PoC宽窄融合互通解决方案