自动生成JAVA 增删改查

        利用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
发布了65 篇原创文章 · 获赞 21 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_39028580/article/details/80337874