自动生成代码工具 模板工具类

                                                      自动生成代码工具 模板工具类

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ijwt.exception.JavaTypeException;
import com.ijwt.exception.MybatisTypeException;

import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

/**
 * @author InJavaWeTrust
 */
public enum UtilFreemarker {
	
	INSTANCE;
	
	private static Logger log = LoggerFactory.getLogger(UtilFreemarker.class);
	
	/**
	 * 获取java属性</br>
	 * @param tableName 表名
	 * @return java属性list
	 */
	public List<String> getJavaPropertyList(String tableName) {
		List<String> javaPropertyList = new ArrayList<>();
		List<String> columnNameList = UtilDB.getColumnNameByTableName(tableName);
		columnNameList.forEach(columnName -> javaPropertyList.add(UtilString.INSTANCE.columnNameToJavaName(columnName)));
		return javaPropertyList;
	}
	
	/**
	 * 获取表中列
	 * @param tableName 表名
	 * @return list
	 */
	public List<String> getColumnNameForMybatis(String tableName) {
		return UtilDB.getColumnNameByTableName(tableName);
	}
	
	/**
	 * 得到表中列字段长度最长的列字段
	 * @param tableName 表名
	 * @return 最长的列字段
	 */
	public int getMaxColumnLength(String tableName){
		List<String> columnList = getColumnNameForMybatis(tableName);
		Optional<Integer> opt = columnList.stream().map(String::length).max(Integer::compareTo);
		int maxLen = 0;
		if (opt.isPresent()) {
			maxLen = opt.get();
		}
		return maxLen;
	}
	
	/**
	 * 得到Java属性字段长度最长的字段长度
	 * @param tableName 表名
	 * @return Java属性最长字段长度
	 */
	public int getMaxJavaPropertyLength(String tableName){
		List<String> propertyList = getJavaPropertyList(tableName);
		Optional<Integer> opt = propertyList.stream().map(String::length).max(Integer::compareTo);
		int maxLen = 0;
		if (opt.isPresent()) {
			maxLen = opt.get();
		}
		return maxLen;
	}
	
	/**
	 * 获取表中列注释
	 * @param tableName 表名
	 * @return list
	 */
	public List<String> getRemarks(String tableName) {
		return UtilDB.getColumnCommentByTableName(tableName);
	}
	
	/**
	 * 获取表中列类型并转换成java类型
	 * @param tableName 表名
	 * @return list
	 */
	public List<String> getColumnType(String tableName) {
		List<String> retTypes = new ArrayList<>();
		List<String> typeList = UtilDB.getColumnTypeByTableName(tableName);
		typeList.forEach(type -> {
			try {
				retTypes.add(UtilString.INSTANCE.columnTypeToJavaType(type));
			} catch (JavaTypeException e) {
				log.error(e.getMessage());
			}
		});
		return retTypes;
	}
	
	/**
	 * 获取mybatis类型
	 * @param tableName 表名
	 * @return list
	 */
	public List<String> getMybatisType(String tableName) {
		List<String> retTypes = new ArrayList<>();
		List<String> typeList = UtilDB.getColumnTypeByTableName(tableName);
		typeList.forEach(type -> {
			try {
				retTypes.add(UtilString.INSTANCE.mySqlTypeToJdbcType(type));
			} catch (MybatisTypeException e) {
				log.error(e.getMessage());
			}
		});
		return retTypes;
	}
	
	/**
	 * 获取title
	 * @param tableName 表名
	 * @return
	 */
	public String getTitle(String tableName) {
		return UtilDB.getTableCommentByTableName(tableName);
	}
	
	/**
	 * 获取dataModel
	 * @param tableName 表名
	 * @return Map
	 */
	public Map<Object, Object> getTableInfo(String tableName){
		Map<Object, Object> map = new HashMap<>();
		map.put("title",                 getTitle(tableName));
		map.put("javaPropertyList",      getJavaPropertyList(tableName));
		map.put("mybatisColumns",        getColumnNameForMybatis(tableName));
		map.put("remarks",               getRemarks(tableName));
		map.put("columnTypes",           getColumnType(tableName));
		map.put("mybatisTypes",          getMybatisType(tableName));
		map.put("maxColumnLength",       getMaxColumnLength(tableName));
		map.put("maxJavaPropertyLength", getMaxJavaPropertyLength(tableName));
		return map;
	}
	
	public void generateFile(String fileName, String templateName, Map<Object, Object> map){
		Configuration config = new Configuration(Configuration.VERSION_2_3_23);
		config.setDefaultEncoding("UTF-8");
		config.setTemplateLoader(new ClassTemplateLoader(UtilFreemarker.class, "/"));
		config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
		try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
				new FileOutputStream(fileName), "UTF-8"));) {
			Template template = config.getTemplate(templateName);
			template.process(map, out);
		}catch(Exception e){
			log.error(e.getMessage());
		}
	}
	
}

 

Java POI Excel模板导入通用工具类实现 本文还有配套的精品资源,点击获取 简介:Java POI是一个用于处理Microsoft Office文件格式的开源库,特别是在Java中操作Excel文件。本工具类提供了一种通用方法,用于从Excel模板导入数据,同时支持2003和2007两种版本的Excel文件。它包含了模板解析、数据绑定、版本兼容、异常处理、性能优化、单元格样式控制、公式处理以及读写操作等多种核心功能... 阅读详情

相关推荐

FreeMarker工具类全面教程

FreeMarker是一款用Java编写的模板引擎,其历史可以追溯到2000年,最初是为了简化Web应用中页面的生成而设计。与早期的JSP等技术相比,FreeMarker提供了一个更加清晰、灵活的方式来生成HTML页面或其他格式的文本文件,尤其是在MVC架构的Web应用中。FreeMarkerUtils是围绕FreeMarker模板引擎开发的一套工具类,它通过封装提供了更多便捷的功能,简化了模板操作的复杂度。

weixin_29317963的博客 883

代码自动生成工具——TableGo(实例演示)

代码自动生成工具——TableGo(实例演示)

白白白鲤鱼的博客 8170

java代码生成器内含模板

ssm框架的代码生成器,基于freemarker的模板,模板可以按需自己修改。映射文件,映射器,service接口,service实现,controller控制器均可由本工具生成。如需生成页面文件(jsp,html等)需自己添加模板,对代码稍作修改即可。

代码生成工具类

setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I,加%s则不生成I。.setInclude(scanner("请输入表名(多个以英文逗号隔开):").split(",")).setModuleName(scanner("模块名"));//.setTablePrefix(tablePrefix) //表前缀。

weixin_56311692的博客 244

java项目代码生成工具

java代码生成工具,使用freemarker做模版,resource下有模版的例子,可以自己定义需要生成的模版进行生成。暂时只开发了controller,service ,impl的模版。

代码自动生成工具

文件是我优化过的代码自动生成工具,相关教程可以查看我的博客https://blog.youkuaiyun.com/qq_25814003/article/details/83062246

Java进阶之 如何自动生成代码

一、前言:为什么要有代码的自动生成? 对于这个问题 最简洁直接的回答就是:代替手动编写代码、提高工作效率。 什么样的场景和代码适合用自动生成这种方式呢? 做过Java服务端的朋友一定都知道代码中我们需要编写与数据库表映射的Java实体类(Entity)、需要编写与实体对应的DAO类(XxDao.java类中有包含对应实体的增、删、改、查基本操作)。在这些实体类中通常都是一些属性方法以及属

春哥的博客 1万+

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 557

推荐几个代码自动生成器_代码生成器(2),2024年最新现在做Golang开发有前途吗

机械的增删改查基础代码和界面功能,自由拖拽定制,面向零基础,拖拽式编程,赋能企业,前后端代码一键生成,能够有效的提升效率。AutoCoder自动代码生成器是一个根据模板自动生成代码的代码生成工具,根据模板的不同,可以生成任何语言(如:ASP、C#、C++BUILDER、DELPHI、JAVA、JSP、PHP、VB、。一个超级强大的代码生成器网站,这个代码生成器非常完善, java,php,python,nodejs都支持,前后端分离,翻页,联合查询都做了,当之无愧的代码生成器中的战斗机。

2401_84248479的博客 1006

MATLAB新手必看:SVPWM七段式算法仿真全流程解析(附完整代码)

本文为MATLAB新手和电机控制初学者提供了SVPWM七段式算法的完整仿真与代码实现指南。文章详细解析了从扇区判断、矢量作用时间计算到PWM波形生成的全流程,并附带了可直接运行的MATLAB代码,帮助读者在理解FOC控制核心算法的基础上,快速掌握工程仿真与调试技巧。

weixin_29074295的博客 283

平均电流控制模式BUCK变换器的环路设计

引言 电压模式的BUCK变换器存在的常见缺点: 1、在没有前馈补偿的时候,对输入源的跳动响应较慢; 2、在不加入电感电流控制的时候,由于不直接对电感电流进行采样,因此不能实时的控制电感电流,有可能在某些负载极端变化时,系统直接奔溃; 3、LC组成的二阶系统存在谐振点,谐振峰随负载变化而变化,不容易做到完全消除; 峰值电流模式的BUCK变换器存在的常见缺点: 1、占空比大于50%时,存在次谐波震荡的问题,需要添加斜坡补偿已解决该问题; 2、抗干扰能力较差; 3、峰值电流和平均电流间存在误差,不适合做PFC线路

c007106333的博客 1万+

自动生成Java代码,mybatis mapper文件工具

自动生成代码工具 通过freemarker模板生成MySQL数据库表对应的Javabean和mybatis mapper文件。 配置文件 模板文件 自定义异常 工具类 数据库工具类 文件工具类 模板工具类 字符串工具类 配置文件工具类 bean类 其他类...

4万+

Type-C转DP1.4转C双向互传转接线方案

Type-C转DP双向互转方案的核心在于利用Type-C接口中的Alt Mode(交替模式)功能。通过利用Type-C接口的Alt Mode功能,该方案实现了Type-C接口与DP接口之间的双向互传,极大地丰富了用户的视觉体验。在选择Type-C转DP双向互转方案时,用户需要关注兼容性、性能需求、线缆长度和品牌等因素,以确保获得最佳的传输质量和使用体验。因此,Type-C转DP双向互转方案应运而生,旨在实现Type-C接口与DP接口之间的无缝连接,满足用户对高效能和高清晰度视频传输的需求。

m0_70875024的博客 4979

记录自己的Mybatis-plus之路02-mp自定义模板

mp自动生成代码工具类在请看上篇文章 传送-->记录自己的Mybatis-plus之路01-初识mp 土 豪 链 接模板下载 平民往下走 目录 自定义模板Controller 自定义模板service 自定义模板serviceImpl 自定义模板dao 自定义模板mapper 自定义模板DO 自定义模板form 自定义模板VO 自定义模板Controller 其...

GMaya的博客 3623

【STK】手把手教你利用STK进行覆盖分析05-方位覆盖分析、覆盖网络检查工具和单对象覆盖分析

这一篇是我们STK覆盖模块的理论部分的最后一篇文章,之后会找尽可能多的论文来复现论文中关于STK覆盖模块的仿真的部分,到时候大家遇到不会的就可以结合前面的理论部分来看。

weixin_44184852的博客 1493

高云FPGA系列教程(1):FPGA和ARM开发环境搭建

至此,高云FPGA和MCU开发环境就搭建完成了,整体还是比较简单的,几乎是一键完成,下一篇文章我们进行实际的FPGA和MCU开发。本文是高云FPGA系列教程的第1篇文章。

whik1194的博客 6195

Mybatis-plus自动生成代码

1、添加依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>org.freemarker</gr

GM_115的博客 589

Python全栈项目--手机语音远程控制智能家居系统(含嵌入式控制)

摘要:本项目实现了一个基于Python全栈的智能家居语音控制系统,支持手机端语音指令控制家居设备。系统采用FastAPI后端+Vue3前端的架构,集成Web Speech API实现语音识别,通过嵌入式设备(如ESP32)执行硬件控制。功能包括用户认证、设备管理、场景联动、指令解析和日志记录,支持HTTP轮询和直推两种命令下发模式。项目涵盖物联网全链路开发,适用于课程设计或毕业设计原型开发。

exlink2012的专栏 883

java单测自动生成_「Java」 - SpringBoot & 自动生成Repository类

MyBatis有MyBatis-Generator和MyBatis-Plus能够生成代码,但是对于JPA,上节的总结中,可以通过Hibernate连接db自动生成entity。对于一般的CURD操作,继承JpaRepository生成的方法就基本够用,网上搜了下,貌似没有自动根据entity生成repository的工具。好在repository接口只是继承JpaRepository,并没有太多需...

weixin_28850145的博客 466

Pareto 优化 (Pareto Optimization) 算法详解及案例分析

Pareto 最优解是指在多目标优化问题中,无法通过改进一个目标而不损害其他目标的解。具体来说,对于一个解x∗x^*x∗,如果不存在另一个解xxx使得所有目标函数fixf_i(x)fi​x都不劣于fix∗f_i(x^*)fi​x∗,且至少有一个目标函数fjxf_j(x)fj​x优于fjx∗f_j(x^*)fj​x∗,则x∗x^*x∗是 Pareto 最优解。

闲人编程的博客 2765

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一键生成代码

想不想一次性生成增删改查所需的所有代码(包括请求类controller)?我也想啊!最近在学习研究自动生成代码的一些方法,学到了一些新的东西,好不好用自己试过才知道,但自己用着的确还可以,分享一下。大家都知道mybatis框架中有一个插件可生成代码,但生成的代码比较局限,很多地方需要修改。接下来的内容就是在其基础上通过配置来更简单的实现生成更完善的代码的功能,也就是最少修改甚至不修改即可用的一键生成代码工具。

感谢阅读 1093

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MybatisPlus查询时间字段为空时报错问题

使用的MybatisPlus及自动生成代码的工具类,用的内置的默认模板。但在接口调用时发现时间字段数据库中的数据为空时,查询会直接报查询不到对应字段的异常。查阅资料后,发现引起异常的原因是MybatisPlus代码生成器中生成的Date类默认是java.time.LocalDateTime;有的版本在解析时没有非空判断,时间为空时则报错。

Java全栈领域/离线地图/微服务 823

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

自动生成代码工具 模板文件

自动生成代码工具 模板文件 package ${javapackage}.po; /** * <p>${title}</p> * 类名:${className}PO<br> * 创建人:${author}<br> * 创建时间:${.now?string(...

4万+

自动生成代码工具 文件工具类

自动生成代码工具 文件工具类 import java.io.File; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.slf4j.Lo...

4万+

自动生成代码工具类

自动生成代码工具自动生成代码的思路代码结构生成代码主要步骤生成实体模板开始生成代码最终生成的实体service层接口 这是我在工作之余自己写的一个Java代码生成工具,虽然网上有不少代码自动生成的工具,但是原理都差不多,自己用空闲时间写一个也能学到一些东西,虽然不推荐重复造轮子,但是自己动手写一个自动生成代码的工具类是花不了多少时间的,只要把思路弄清楚,半天就能撸一个出来,现在我在工作中一般都是用...

wuzhangweiss的博客 1万+

mybatisPlus自动生成代码工具类

package com.run.zdr.report.utils; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.genera...

fager漫长路 1150
上一篇: 自动生成代码工具 文件工具类
下一篇: 自动生成代码工具 字符串工具类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值