偷懒神器-->花样的代码生成工具

1、CRUD代码生成:
根据MyBatisPlus逆向工程改造而来,添加了showDoc文档生成,数据库脚本生成,增删改查文件生成,Po、Vo、Request对象生成等。普通的增删改查一般搞定。并预调了部份判断逻辑。
在这里插入图片描述
效果示例:

public class AddHandingPortionAdjustLogic implements ContextLogic<HandingPortionAdjustUpdateRequest> {@Autowiredprivate HandingPortionAdjustMapper handingPortionAdjustMapper;@Overridepublic void handleContext(HandingPortionAdjustUpdateRequest context) {HandingPortionAdjust handingPortionAdjust = context.getForm();if (null == handingPortionAdjust ) {throw new LocalException("调整记录参数不能为空");}handingPortionAdjustMapper.insert(handingPortionAdjust );}
}

2、Excel导入导出代码生成:
无他,拼字符串拼成文件,哈哈。

public class ExcelGenUtil {private final static Class<?> aClass = CppccMemberBackup.class;public static void main(String[] args) {String name = ZYStrUtils.firstLowerCase(aClass.getSimpleName());String supperName = ZYStrUtils.firstUpperCase(name);GenParam genParam = new GenParam();genParam.setAuthor("simple");genParam.setFileBaseDir("D:\\codeGen");genParam.setResponseFileName("用户");genParam.setExcelEntityPackageName("com.xxx.module.user.logics." + name + ".excel");genParam.setMapperPackageName("com.xxx.module.user.mapper." + supperName + "Mapper");genParam.setRequestPackageName("com.xxx.module.user.logics." + name + ".request." + supperName + "SelectRequest");genParam.setAClass(aClass);Generator.gen(genParam);}
}public static void gen(GenParam genParam) {ExcelExportGenerator.generateExcelModel(genParam);ExcelImportGenerator.generateExcelModel(genParam);ExcelExportModelGenerator.generateExcelModel(genParam);ExcelImportModelGenerator.generateExcelModel(genParam);System.out.println("生成完毕");}

在这里插入图片描述

3、脚本生成:
无他,拼字符串也。哈哈

    public static String INSERT_SQL = "INSERT INTO xxx (id,table_id,join_table_id,column_name,column_comment,column_type,column_places,java_name,is_show,show_width,is_query,is_querydefault,dict_type)" +"VALUES ('%s_%s','%s','','%s','%s','%s','column_places','%s',0,100,0,0,'%s');";public static void main(String[] args) {tableIds="xxx";String properties = "name";String propertiesName = "xx名称";String propertiesType = "string";String dictType = "";List<String> tableIdList = ZYListUtils.str2List(tableIds);List<String> sqls = new ArrayList<>();for (String tableId : tableIdList) {sqls.add(buildSql(tableId, properties, propertiesName, propertiesType, dictType));}String now = ZYDateUtils.formart(new Date(), "yyyy-MM-dd-HH-mm-ss");ZYFileUtils.writeLines(sqls, "D://form_coustom_sql" + now + ".sql", "UTF-8", true);}private static String buildSql(String tableId, String properties, String columnName, String type, String dictType) {String column = ZYStrUtils.camelToUnderline(properties);return String.format(INSERT_SQL, tableId, column, tableId, column, columnName, type, properties, dictType);}
}

4、get set this 代码生成:
无他,拼字符串尔,哈哈

public static <T> void writeSomeEasy(Class<T> clst, WriteType writeType) {Field[] declaredFields = clst.getDeclaredFields();StringBuilder sb = new StringBuilder();String clasName = clst.getSimpleName();String newObj = clasName + " " + ZYStrUtils.firstLowerCase(clasName) + "= new " + clasName + "();";sb.append(newObj).append("\r\n");for (Field field : declaredFields) {String fieldName = field.getName();if ("serialVersionUID".equals(fieldName)) {continue;}String objectName = ZYStrUtils.firstLowerCase(clst.getSimpleName());String simpleName = field.getType().getSimpleName();String text = getTestByFields(writeType, fieldName, simpleName, objectName);sb.append(text).append("\r\n");}System.out.println(sb.toString());}private static String getTestByFields(WriteType writeType, String fieldName, String typeName, String key) {switch (writeType) {case doc_param:// |id|否|string|id|return "|" + fieldName + " |否  |" + typeName + " |" + fieldName + "   |";case doc_result:// |id|string|id|return "|" + fieldName + " |" + typeName + "   |" + fieldName + " |";case str_json_get_str:// String id=model.getString("id");return "String " + fieldName + "= " + key + ".getString(\"" + fieldName + "\");";case set_model:// model.setId(id);return key + ".set" + ZYStrUtils.firstUpperCase(fieldName) + "(" + fieldName + ");";case set_model_withmap:// model.setId(id);return key + ".set" + ZYStrUtils.firstUpperCase(fieldName) + "(importMap.getString(\"\"));";case get_set:// model.setId(model.getId());return key + ".set" + ZYStrUtils.firstUpperCase(fieldName) + "(" + key + ".get"+ ZYStrUtils.firstUpperCase(fieldName) + "());";case this_get_set:// model.setId(this.id);return key + ".set" + ZYStrUtils.firstUpperCase(fieldName) + "(this." + fieldName + ");";case this_set:// this.id=model.getId();return "this." + fieldName + "=" + key + ".get" + ZYStrUtils.firstUpperCase(fieldName) + "();";case type_get:// String id=model.getId();return typeName + " " + fieldName + " = " + key + "." + "get" + ZYStrUtils.firstUpperCase(fieldName)+ "();";default:break;}return null;}public static enum WriteType {doc_param, doc_result, str_json_get_str, set_model, get_set, this_get_set, this_set, type_get, set_model_withmap,url_param;}

5、ShowDoc文档生成
无他,拼字符串尔,哈哈

    public static void toJsonParam(Class<?> oneClass) throws Exception {Map<String, Field> fieldMap = ZYReflectUtils.getFieldMap(oneClass);Map<String, String> map = new HashMap<>();fieldMap.forEach((name, field) -> {final ColumnName columnName = field.getAnnotation(ColumnName.class);String desc = null != columnName ? columnName.value() : field.getName();map.put(field.getName(), desc + "#(" + field.getType().getSimpleName() + ")");});String string = JSONObject.toJSONString(map);System.out.println(string);}//|groupid |int   |用户组id,1:超级管理员;2:普通用户  |public static void toShowDocResult(Class<?> oneClass) throws Exception {Map<String, Field> fieldMap = ZYReflectUtils.getFieldMap(oneClass);fieldMap.forEach((name, field) -> {final ColumnName columnName = field.getAnnotation(ColumnName.class);String desc = null != columnName ? columnName.value() : field.getName();String doc = "|%s |%s|%s|";String format = String.format(doc, name, field.getType().getSimpleName(), desc);System.out.println(format);});}
}

6、项目文档需要采集数千行源代码。需要一个个文件打开复制的解决办法

public class CollectCodeDemo {public static void main(String[] args) {// 工程目录String dir = "D:\\javacode\\xxx\\xxx\\module-consult\\future-module-consult-service";// 需要的代码行数String outDir = "D:\\doc\\code.txt";projectCodeCollect(dir, 5000, outDir);}@SneakyThrowspublic static void projectCodeCollect(String dir, int line, String outDir) {List<String> contents = new ArrayList<>();projectCodeCollect(contents, new File(dir), line);ZYFileUtils.writeLines(contents, new File(outDir), "UTF-8", true);}private static void projectCodeCollect(List<String> contents, File dir, int line) {if (contents.size() >= line) {return;}File[] files = dir.listFiles();if (null == files || files.length == 0) {return;}for (File fileItem : files) {if (fileItem.isDirectory()) {projectCodeCollect(contents, fileItem, line);} else {String name = fileItem.getName();if (!name.endsWith(".java")) {continue;}try (FileInputStream fileInputStream = new FileInputStream(fileItem)) {List<String> lines = IOUtils.readLines(fileInputStream, "UTF-8");contents.addAll(lines);} catch (Exception e) {e.printStackTrace();}}}}
}

除去MybatisPlus逆向工程需要掌屋一些velocity或freemarker的部份语法外。其他生成工具基本都是拼接字符串生成java或其他类型文档。不是很难。关键是思路问题。当一件事件具备有规律可循、大量、重复、费时、体力劳动时,就要思考会不会有更简单的办法。有的程序员早九晚五下班,有的程序员天天加班,这就是差距。人家输入几个参数生成一大堆模板文件。随便改改套套,OK搞定。有的重复着大量的体力劳动。一行一行写脚本,一个个字母写文件。仅以此文为引子。提供一种让工作更轻松,少加班的思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“用户登录”测试用例总结

前言&#xff1a;作为测试工程师&#xff0c;你的目标是要保证系统在各种应用场景下的功能是符合设计要求的&#xff0c;所以你需要考虑的测试用例就需要更多、更全面。鉴于面试中经常会问“”如何测试用户登录“”&#xff0c;我们利用等价类划分、边界值分析等设计一些测试用…

git的clone,上传,mirror与upstream同步

文章目录 clone日志信息的同步子树合并同步 clone clone他人项目&#xff0c;git到自己的项目 rm -rf .git .git存放原始项目的日志信息&#xff0c;这里需要添加自己的日志信息&#xff0c;需要删除重写。也可手动删除 git init 初始化文件&#xff0c;依据本地日志信息生产.…

Gradle和Maven的区别

Gradle和Maven 当涉及到构建和管理项目时&#xff0c;Gradle和Maven是两个非常流行的选项。本文将讨论Gradle和Maven之间的区别以及它们的配置信息差异。 1. Gradle和Maven的区别 1.1 构建脚本语言 Maven使用XML作为构建脚本语言&#xff0c;而Gradle使用基于Groovy的DSL&…

c 语言解析 时间字符串

#include <iostream> #include <ctime>int main(int argc, char *argv[]) {struct tm timeinfo;char cur_time[] "current time: 2021-09-06 23:50:13";// 解析时间到timeinfo中strptime(cur_time, "current time: %Y-%m-%d %H:%M:%S", &…

查看内存类型和频率 - Win系统

查看内存类型和频率 - Win系统 问题方法1&#xff08;推荐&#xff09;&#xff1a;使用命令行方法2&#xff1a;使用CPU-Z方法3&#xff1a;使用AIDA64 问题 我们在为电脑扩充内存时需要提前了解电脑内存的类型和频率&#xff0c;防止内存不兼容&#xff0c;但在设备管理器和…

java+springboot+mysql疫情物资管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的疫情物资管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、员工角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;部门管理&#xff1b;职位管理&#xff1b;员工管理&…

基于STM32设计的数显热水器

一、项目介绍 当前介绍的项目是基于 STM32F103ZET6 系列 MCU 设计的数显热水器&#xff0c;通过显示屏来显示热水器的温度及其工作状态&#xff0c;通过 PT100 传感器来检测热水器的温度变化&#xff0c;并通过电加热片实现加热过程&#xff0c;以达到控制热水器温度的目的。 …

结构思考力-有效提升你的工作效率20倍以上

结构思考力是一种帮助人们察觉并改善自身思考结构的思考艺术&#xff0c;它将人们的思维表达以一种逻辑结构的形式来表示&#xff0c;从而简化人与人之间的沟通成本&#xff0c;提高工作效率。每个人思考问题的方式不同&#xff0c;不同的思考结构使人们的注意力的方向也不同&a…

机房环境、动力、网络、安防,帮您提高运维效率,确保机房安全

机房作为单位的核心部门&#xff0c;由计算机、服务器、网络设备、存储设备等关键设备组成&#xff0c;智能化计算机机房这个概念在各个领域中&#xff0c;已经占据了很重要的地位&#xff0c;伴随着国家大力倡导的&#xff0c;东数西算&#xff0c;数字经济、云计算、5G大数据…

IPC进程间通信探索——管道的原理与特点

&#x1f923; 爆笑教程 &#x1f449; 《看表情包学Linux》 &#x1f525; CSDN 累计订阅量破千的火爆 C/C 教程的 2023 重制版&#xff0c;C 语言入门到实践的精品级趣味教程。了解更多&#xff1a; &#x1f449; "不太正经" 的专栏介绍 ← 试读第一章订阅链接&am…

深度学习之tensorboard可视化工具

(1)什么是tensorboard tensorboard是TensorFlow 的一个可视化工具包&#xff0c;提供机器学习实验所需的可视化和工具&#xff0c;该工具的功能如下&#xff1a; 跟踪和可视化指标&#xff0c;例如损失和精度可视化模型图&#xff08;操作和层&#xff09;查看权重、偏差或其…

【动态规划】子序列系列

文章目录 动态规划&#xff08;子序列系列&#xff09;1. 最长递增子序列2. 摆动序列3. 最长递增子序列的个数4. 最长数对链5. 最长定差子序列6. 最长的斐波那契子序列的长度7. 最长等差数列8. 等差数列划分 || - 子序列 动态规划&#xff08;子序列系列&#xff09; 1. 最长递…

mac电脑访问windows共享文件夹连接不上(设置445端口)

前提&#xff1a;首先需要保证mac和windows都在同一局域网内&#xff0c;如果不在肯定是连不上的&#xff0c;就不用往下看了。 事情是这样的&#xff0c;公司入职发了mac电脑&#xff0c;但是我是window重度用户&#xff0c;在折腾mac的过程中&#xff0c;有许多文件需要从wi…

Arcgis 分区统计majority参数统计问题

利用Arcgis 进行分区统计时&#xff0c;需要统计不同矢量区域中栅格数据的众数&#xff08;majority&#xff09;&#xff0c;出现无法统计majority参数问题解决 解决&#xff1a;利用copy raster工具&#xff0c;将原始栅格数据 64bit转为16bit

kotlin 编写一个简单的天气预报app(三)broadcast换成eventbus

使用eventbus替换broadcast 将从Broadcast切换到EventBus有以下几个好处&#xff1a; 解耦性&#xff1a;通过使用EventBus&#xff0c;您可以实现组件之间的解耦。传统的Broadcast机制需要发送方和接收方明确知道对方的存在&#xff0c;并且需要在代码中设置Intent过滤器和广…

springboot项目如何自动重启(使用Devtools检测修改并自动重启springboot)

1. 问题&#xff1a; 我们在项目开发阶段&#xff0c;可能经常会修改代码&#xff0c;修改完后就要重启Spring Boot。经常手动停止再启动&#xff0c;比较麻烦。 所以我们引入一个Spring Boot提供的开发工具&#xff1b; 只要源码或配置文件发生修改&#xff0c;Spring Boot应用…

4年测试工程师,常用功能测试点总结,“我“不再走弯路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 输入框测试 1、字…

如何把几个视频合并在一起?视频合并方法分享

当我们需要制作一个比较长的视频时&#xff0c;将多个视频进行合并可以使得整个过程更加高效。此外&#xff0c;合并视频还可以避免出现“剪辑断层”的情况&#xff0c;使得视频内容更加连贯&#xff0c;更加容易被观众理解和接受。再有&#xff0c;合并视频还可以减少视频文件…

原型链污染,nodejs逃逸例子

文章目录 原型链污染原型链污染原理原型链污染小例子 原型链污染题目解析第一题第二题 Nodejs沙箱逃逸方法一方法二 原型链污染 原型链污染原理 原型链 function test(){this.a test; } b new test;可以看到b在实例化为test对象以后&#xff0c;就可以输出test类中的属性a…

“数智新应用”不再是口号,看汽车、医药、制造企业如何突出重围?

近日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海前滩香格里拉大酒店成功举行。大会包含上午的主论坛和下午的 4 场平行论坛&#xff0c;并举办了闭门会议、Open Day 等活动。来自金融、零售、制造、医药等行业的客户及合作伙伴带来了超过 23 场主题演讲…