利用FreeMarker模板引擎来生成Java 增删改查Controller及Service层代码(下面为一个工具类,可直接使用):
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* @author: shilei
* @time:2017年3月22日 上午10:38:17
* 类说明: 模板生成Java后端CURD方法
*/
public class CRUDForJava {
// 实体类(注意首字母大写驼峰命名)
private static String Model_Name = "";
// 项目名称
private static String Project_Name = "";
// 工作空间地址
private static String Work_Place_URL = "";
// 保存生成文件的包名路径
private static String Controller_Package_Url ="";
private static String Service_Package_Url ="";
private static String ServiceImpl_Package_Url ="";
// 模板所在包名路径
private static String Ftl_Url ="";
// 采用的模板文件名称
private static String Controller_Ftl = "";
private static String Service_Ftl = "";
private static String ServiceImpl_Ftl = "";
// 作者
private static String Author = "";
// 类描述
private static String Desc = "";
/
// 项目路径
private String Project_URL = "";
// 生成文件保存路径
private String Save_Url_1 = "";
private String Save_Url_2 = "";
private String Save_Url_3 = "";
// map
private static Map<String, String> root = new HashMap<>();
// 生成代码
private void createCode() throws Exception {
createController(Model_Name);
createService(Model_Name);
createServiceImpl(Model_Name);
}
// Controller代码生成
private void createController(String param1) throws Exception {
// 1 创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 2 设置模板文件存放的路径
configuration.setDirectoryForTemplateLoading(new File(Work_Place_URL+ Project_URL + Ftl_Url));
// 3 一般设置默认字符集为utf-8
configuration.setDefaultEncoding("utf-8");
// 4 获取模板对象
Template template = configuration.getTemplate(Controller_Ftl);
// 5 通过map对象或者pojo对象 创建模板所需数据集
root.put("ModelName", Model_Name);
root.put("modelName", FirstToLower(Model_Name));
root.put("projectName", Project_Name);
root.put("createTime", getNowTime());
root.put("controller_package_url", changePackageUrl(Controller_Package_Url));
root.put("author", Author);
root.put("description", Desc);
// 6 设置生成文件后保存的路径及文件名
Writer out = new FileWriter(new File(Save_Url_1+"Controller.java"));
// 7 通过模板对象的process方法生成静态文件
template.process(root, out);
// 8 关闭资源
out.flush();
out.close();
}
// Service代码生成
private void createService(String param1) throws Exception {
// 1 创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 2 设置模板文件存放的路径
configuration.setDirectoryForTemplateLoading(new File(Work_Place_URL + Project_URL + Ftl_Url));
// 3 一般设置默认字符集为utf-8
configuration.setDefaultEncoding("utf-8");
// 4 获取模板对象
Template template = configuration.getTemplate(Service_Ftl);
// 5 通过map对象或者pojo对象 创建模板所需数据集
root.put("service_package_url", changePackageUrl(Service_Package_Url));
// 6 设置生成文件后保存的路径及文件名
Writer out = new FileWriter(new File(Save_Url_2+"Service.java"));
// 7 通过模板对象的process方法生成静态文件
template.process(root, out);
// 8 关闭资源
out.flush();
out.close();
}
// ServiceImpl代码生成
private void createServiceImpl(String param1) throws Exception {
// 1 创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 2 设置模板文件存放的路径
configuration.setDirectoryForTemplateLoading(new File(Work_Place_URL + Project_URL+ Ftl_Url));
// 3 一般设置默认字符集为utf-8
configuration.setDefaultEncoding("utf-8");
// 4 获取模板对象
Template template = configuration.getTemplate(ServiceImpl_Ftl);
// 5 通过map对象或者pojo对象 创建模板所需数据集
root.put("serviceImpl_package_url", changePackageUrl(ServiceImpl_Package_Url));
// 6 设置生成文件后保存的路径及文件名
Writer out = new FileWriter(new File(Save_Url_3+"ServiceImpl.java"));
// 7 通过模板对象的process方法生成静态文件
template.process(root, out);
// 8 关闭资源
out.flush();
out.close();
}
//获取当前时间
private static String getNowTime(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
return df.format(new Date());// new Date()为获取当前系统时间
}
//首字母转换小写
private static String FirstToLower(String str) {
char[] chars = new char[1];
chars[0] = str.charAt(0);
String temp = new String(chars);
if (chars[0] >= 'A' && chars[0] <= 'Z') {//当为字母时,则转换为小写
return str.replaceFirst(temp, temp.toLowerCase());
}
return str;
}
private String changePackageUrl(String str) {
String replaceAll = str.replaceAll("\\\\", ".");
String sub = replaceAll.substring(0, replaceAll.length()-1);
return sub;
}
//开始读取配置文件并进行属性赋值
private boolean initField(String url) throws IOException{
String[] keys={ "Model_Name", "Project_Name", "Work_Place_URL", "Controller_Package_Url", "Service_Package_Url", "ServiceImpl_Package_Url", "Ftl_Url", "Controller_Ftl", "Service_Ftl", "ServiceImpl_Ftl", "Author", "Desc"};
// 查找src目录下的文件
InputStream inputStream = CRUDForJava.class.getClassLoader().getResourceAsStream(url);
Properties prop = new Properties();
boolean flag=false;
try{
prop.load(inputStream);
for (int i = 0; i < keys.length; i++) {
Field field = CRUDForJava.class.getDeclaredField(keys[i]);
field.set(keys[i], prop.get(keys[i]));
}
Project_URL = Project_Name + "\\src\\main\\java\\";
Save_Url_1 = Work_Place_URL + Project_URL + Controller_Package_Url + Model_Name;
Save_Url_2 = Work_Place_URL + Project_URL + Service_Package_Url + Model_Name;
Save_Url_3 = Work_Place_URL + Project_URL + ServiceImpl_Package_Url + Model_Name;
flag=true;
}catch (Exception e){
e.printStackTrace();
flag=false;
}finally{
inputStream.close();
}
return flag;
}
//开启
public void toStart(String url) throws Exception {
boolean flag = initField(url);
if (flag) {
createCode();
System.out.println("操作完毕!!!");
}else {
System.out.println("操作失败!!!");
}
}
//获取模板中所用key
public void getKeys() {
root.put("ModelName", "实体名、类名");
root.put("modelName", "ModelName首字母小写" );
root.put("projectName", "项目名称");
root.put("createTime", "创建时间");
root.put("author", "作者");
root.put("controller_package_url", "Controller生成文件的包名路径(使用分隔符 .)");
root.put("service_package_url", "Service生成文件的包名路径(使用分隔符 .)");
root.put("serviceImpl_package_url", "Service实现类生成文件的包名路径(使用分隔符 .)");
root.put("description", "生成文件的粗略描述");
for (String key : root.keySet()) {
System.out.println(key + "==" + root.get(key));
}
}
// freemarker的运行不依赖web容器,可以在java工程中运行测试
public static void main(String[] args) throws Exception {
new CRUDForJava().toStart("param.properties");
// new CRUDForJava().getKeys();
}
}
配置文件:
#实体类(注意首字母大写驼峰命名)
Model_Name =Tm
#项目名称
Project_Name =nzw-data-api
#工作空间地址
Work_Place_URL =C:\\Users\\YongWen\\workspace\\
#保存生成文件的包名路径(使用分隔符 \\)
Controller_Package_Url =com\\gcx\\api\\controller\\
Service_Package_Url =com\\gcx\\api\\service\\
ServiceImpl_Package_Url =com\\gcx\\api\\service\\impl\\
#模板所在包名路径
Ftl_Url =com\\gcx\\api\\common\\ftl\\
#采用的模板文件名称
Controller_Ftl =Controller5.ftl
Service_Ftl =Service5.ftl
ServiceImpl_Ftl =ServiceImpl5.ftl
#作者
Author =shilei
#类描述
Desc =CRUD