本来的那个代码生成器不能自定义,修改起来有点太麻烦,所以就自己写一个。
一、首先添加jar包:
Velocity-1.7.jar : 模板引擎
commons的2个jar包 :是模板引擎依赖了人家的类
Guava-27.1-jre.jar :是对字段名的转换,比如good_name字段,在java类的属性叫
goodName,当setGoodName时又变成首字母都大写:GoodName,这个jar可以
方便转换。
二、在项目文件夹下建立名为Code 文件夹并在此文件夹中建立CodeBuillder 类
代码如下所示:
package com.wy.code;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Properties;
import org.apache.ibatis.cache.decorators.WeakCache;
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="F:/WY/SchoolQ/shop1";
//变量放到上下文对象中
VelocityContext ctx = new VelocityContext();
ctx.put("modelClass", modelClass);
ctx.put("modelName", modelName);
//将占位符数据和模板合并,输出代码文件
merge(serviceVm, ctx, rootPath+"/src/com/wy/service"+modelClass+"Service.java");
System.out.print("成功");
}
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) {
}finally{
writer.close();
}
}
}
同时在WebContent--WEB-INF中新建VM文件夹,在文件夹中建立service.vm文件,文件代码如下所示
package com.wy.service;
import java.util.List;
import com.github.pagehelper.PageInfo;
import com.wy.model.${modelClass};
public interface ${modelClass}Service {
/**
* 有分页的查询
* @param pageNum
* @param pageSize
* @param user
* @return
*/
public PageInfo<${modelClass}> list(Integer pageNum, Integer pageSize, ${modelClass} ${modelName});
/**
* 没有分页的查询
* @param pageNum
* @param pageSize
* @param user
* @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);
}
写这个代码自动生成器,自动生成的是userService类的代码。userServiceImpl的自动生成过程类似。
CodeBuilder类页面右击选择Run as ----java application
运行成功的话,刷新项目,Service文件夹中会出现自动生成的类。