自定义代码生成器

本文详细介绍了代码生成器的工作流程,包括创建模板、使用模板引擎替换占位符、生成具体代码文件的过程。通过实例展示了如何利用Apache Velocity进行代码自动生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码生成器的原理

(1)编写一个模板,比如要生成XXXService.java,service里面所有代码讲模块部分全部用占位符/变量名代替。比如MenuService改成${modelClass}Service

(2)使用模板引擎,向模板中传递需要的占位符数据,比如${modelClass},这次要生成Menu,就传Menu,下次要建good,就传Good,就可以生成出来不同的模块,但代码只写了模板里面的这一遍

(3)通过模板引擎,将替换好的占位符的模板输出为具体的MenuService.java、MenuController.java甚至是menu.jsp

步骤

1.导包

2.新建类com.zq.code.CodeBuilder,要有main方法,需要单独运行生成代码文件。不走spring框架;

package com.zq.code;

import java.io.PrintWriter;
import java.util.Properties;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;

public class CodeBuilder {

	public static void main(String[] args) {
		//new一下他的模版引擎
		VelocityEngine ve = new VelocityEngine();
		//设置模版和输出的代码文件的编码方式
		Properties p = new Properties();
		p.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
		p.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
		p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
		ve.init(p);//引擎初始化
		
		//引入一个模版,通过模版路径
		Template serviceVm = ve.getTemplate("/WebContent/WEB-INF/vm/service.vm");
		
		//定义占位符变量,给个值
		String modelClass = "Menu";
		String modelName = "menu";
		//生成的代码放置的目录==项目目录
		String rootPath = "C:/Users/Administrator/Desktop/shop/"; 
		
		//变量放到上下文对象里
		VelocityContext ctx = new VelocityContext();
		ctx.put("modelClass", modelClass);
		ctx.put("modelName", modelName);
				
		//将占位符数据和模版合并,输出代码文件
		CodeBuilder.merge(serviceVm, ctx, rootPath +"src/com/zq/service/" + modelClass +"Service.java");
		
		//service实现类的
		Template serviceImplVm = ve.getTemplate("/WebContent/WEB-INF/vm/serviceImpl.vm");
		CodeBuilder.merge(serviceImplVm, ctx, rootPath +"src/com/zq/service/" + modelClass +"ServiceImpl.java");
		
		//dao的
		Template daoVm = ve.getTemplate("/WebContent/WEB-INF/vm/dao.vm");
		CodeBuilder.merge(daoVm, ctx, rootPath +"src/com/zq/dao/" + modelClass +"Dao.java");
		
		System.out.println("成功");
	}
	
	private static void merge(Template template,VelocityContext ctx,String path){
		PrintWriter writer = null;
		try{
			writer = new PrintWriter(path);
			//合并数据和模版,输出文件
			template.merge(ctx, writer);
			writer.flush();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			writer.close();
		}
	}
}

3.写service.vm模板(在WEB-INF中新建vm文件夹)

package com.zq.service;

import java.util.List;
import com.github.pagehelper.PageInfo;
import com.zq.model.${modelClass};

public interface ${modelClass}Service {
	/**
	 * 带有分页的列表查询
	 * @param pageNum
	 * @param pageSize
	 * @param ${modelClass}
	 * @return
	 */
	public PageInfo<${modelClass}> list(Integer pageNum,Integer pageSize,${modelClass} ${modelName});
	
	/**
	 * 没有分页的列表查询
	 * @param pageNum
	 * @param pageSize
	 * @param ${modelClass}
	 * @return
	 */
	public List<${modelClass}> list(${modelClass} ${modelName});
	public void create(${modelClass} ${modelName});
	public void update(${modelClass} ${modelName});
	public void delete(Integer id);
	public ${modelClass} findById(Integer id);
}

其他的模板类似(源代码copy进来把User替换为${modelClass},user替换为${modelName}),再写:serviceImpl.vm  controller.vm  dao.vm

-----------------更新说明----------------- 1.1.2: 支持所有的按键,特殊键也可以直接设置,不用复制到连发键设置框。 取消F12这个热键开关,改为左右WIN键,而且屏蔽了这2个键,按了不会弹出的,变成开关,原来的Scroll Lock不变。 1.1.1: 解决个别杀毒软件误报的现象,原因是由于UPX压缩引起的。 UPX压缩的好处是生成的连发工具体积非常小,只有200KB+,不压缩有400KB+。 生成时加入对话框由用户自行决定是否用UPX压缩(以往默认使用UPX压缩,所以误报很正常)。 右键菜单加入热键。 1.1.0: 解决在关闭连发的情况下所有按键都不正常的BUG,优化了脚本,效率提高,(请务必更新)。 该BUG的表现:按住还能连发(速度慢),有时候随便按个键还按不出(按键不正常)。 修改版本号的形式为X.X.X,菜单加入英文单词提示。 -----------------使用说明----------------- 连发不是连招。。。连发的意思是按下一个键不放就自动连按该键,比如按下X键不放就实现自动攻击,比手动按要快得多,节省力气,还能减少键盘寿命o(∩_∩)o...,至于效果怎么样自己测试吧。 设置自己的连发键: 下载好之后运行 SET_AHK.exe 然后设置你要连发的按键,比如X键,然后点增加,然后点生成连发,就会在目录下面生成一个新文件: DNF_AHK.exe DNF_AHK.exe 可以单独运行的,你可以复制该文件到其他地方保存起来,SET_AHK.exe文件不需要了,当然了,要修改按键必须要用它。 如何使用连发工具: 运行上面生成好的 DNF_AHK.exe 就可以了,工具首次运行自动判断 Scroll Lock 键,会直接开启连发。注意:指示灯亮就表示开启,如果要打字就再按次Scroll Lock键,指示灯关闭就表示关闭连发功能,打字完再按次Scroll Lock键保持连发的开启状态,1.1.2以后版本增加连发热键开关:左右WIN键。 -----------------调整延时方法(非必须)----------------- 第一次运行建议先设置你的键盘延时,这样效果会更加好,当然你也可以不设置,一样可以用本连发工具,而且速度也很快: 直接运行 SetInterval.bat 文件(该文件只有在运行SET_AHK.exe的状态下才生成),点确定导入注册表即可。 这一步其实可以这样操作:控制面板---键盘---重复延时--短 托到最右边的短那里,然后重启电脑就可以了,本工具自带的注册表原理一样的,只是用 SetInterval.bat 弄好之后就可以不重启电脑直接生效,方便网吧用户。 该连发工具基于AutoHotkey核心制作而成。 Vista和WIN7系统请以系统管理员身份运行连发工具,否则可能无法连发,也请大家测试下这些系统是否能用。 56q.5d6d.com 离不开电脑制作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值