最近将原来由txt生成dao,service的模板改成了freemarker。
下面的这个是主要的模板生成类:
package com.yancheng.myframe.createTemplate;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import com.yancheng.myframe.util.Property;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* 根据实体类自动生成 dao dao.impl service service.impl 以及 spring 中的配置文件
*
* @author yancheng
*
*/
public class TemplateGenerator {
private Logger logger = Logger.getLogger(TemplateGenerator.class);
private String entityPath; // 实体类路径
private String daoPath; // dao层路径
private String daoImplPath; // daoImpl层路径
private String servicePath; // service层路径
private String daoTemplatePath; // 生成dao 模版路径
private String daoImplTemplatePath; // 生成dao.impl 模版路径
private String serviceTemplatePath; // 生成service 模版路径
/**
* 初始化参数 从配置文件中得到
*/
public void init() {
String propertyPath = "src/com/yancheng/myframe/createTemplate/config.properties"; // 使用默认路径
init(propertyPath);
}
public void init(String propertyPath) {
Map<String, String> properties = Property.getProperties(propertyPath);
entityPath = properties.get("entityPath");
daoPath = properties.get("daoPath");
daoImplPath = properties.get("daoImplPath");
servicePath = properties.get("servicePath");
daoTemplatePath = properties.get("daoTemplatePath");
daoImplTemplatePath = properties.get("daoImplTemplatePath");
serviceTemplatePath = properties.get("serviceTemplatePath");
}
/**
* @param path
* @return 根据包的路径得到package XXX中的XXX
*/
private String getImportPath(String path) {
StringBuffer result = new StringBuffer();
String[] strings = path.split("/");
for (int i = 1, size = strings.length; i < size; i++) {
result.append(".").append(strings[i]);
}
return result.substring(1);
}
/**
* @param entity
* @return 得到实体名称
*/
private String getEntityName(File entity) {
return entity.getName().substring(0, entity.getName().indexOf("."));
}
/**
* @param s
* String
* @return 首字母小写
*/
public static String firstCharLowerCase(String s) {
if (s == null || "".equals(s)) {
return ("");
}
return s.substring(0, 1).toLowerCase() + s.substring(1);
}
@SuppressWarnings("unchecked")
public void buildTemplate(boolean daoFlag, boolean daoImplFlag, boolean serviceFlag) throws IOException {
File entityDir = new File(entityPath);
entityPath = getImportPath(entityPath);
//得到实体包下所有的实体java文件
File[] entities = entityDir.listFiles();
String daoImport = getImportPath(daoPath);
String daoImplImport = getImportPath(daoImplPath);
String serviceImport = getImportPath(servicePath);
// baseDao, baseImplDao 名字和路径
DefaultTemplate defaultTemplate = new DefaultTemplate();
String baseDaoName = defaultTemplate.getBaseDaoName();
String baseDaoImplName = defaultTemplate.getBaseDaoImplName();
String baseDaoPath = daoImport + "." + baseDaoName;
String baseDaoImpl = daoImplImport + "." + baseDaoImplName;
//开始create了
for (File entity : entities) {
// 过滤掉配置文件
if (!entity.getName().endsWith("java")) {
continue;
}
String entityName = getEntityName(entity);
String daoName = entityName + "DAO";
String daoEntity = firstCharLowerCase(daoName);
String daoImplName = entityName + "DAOImpl";
String serviceName = entityName + "Service";
String modelPath = entityPath + "." + entityName;
String dao = daoImport + "." + daoName;
//~ 生成dao ======================================================================================
if (daoFlag) {
Template template = new Configuration().getTemplate(daoTemplatePath, "UTF-8");
defaultTemplate = new DefaultTemplate();
defaultTemplate.setBaseDaoPath(baseDaoPath);
defaultTemplate.setDaoName(daoName);
defaultTemplate.setPackagePath(daoImport);
defaultTemplate.setModelPath(modelPath);
defaultTemplate.setEntityName(entityName);
createFile(defaultTemplate, daoPath,
entityName + "DAO.java", template);
}
//~ 生成daoImpl ======================================================================================
if (daoImplFlag) {
Template template = new Configuration().getTemplate(daoImplTemplatePath, "UTF-8");
defaultTemplate = new DefaultTemplate();
defaultTemplate.setPackagePath(daoImplImport);
defaultTemplate.setBaseDaoImplPath(baseDaoImpl);
defaultTemplate.setDaoPath(dao);
defaultTemplate.setModelPath(modelPath);
defaultTemplate.setDaoImplName(daoImplName);
defaultTemplate.setEntityName(entityName);
defaultTemplate.setDaoName(daoName);
createFile(defaultTemplate, daoImplPath, entityName
+ "DAOImpl.java", template);
}
//~ 生成service ======================================================================================
if (serviceFlag) {
Template template = new Configuration().getTemplate(serviceTemplatePath, "UTF-8");
defaultTemplate = new DefaultTemplate();
defaultTemplate.setPackagePath(serviceImport);
defaultTemplate.setDaoPath(dao);
defaultTemplate.setModelPath(modelPath);
defaultTemplate.setServiceName(serviceName);
defaultTemplate.setDaoName(daoName);
defaultTemplate.setDaoEntity(daoEntity);
defaultTemplate.setEntityName(entityName);
createFile(defaultTemplate, servicePath, entityName
+ "Service.java", template);
}
}
}
/**
* 生成文件
* @param object
* @param savePath
* @param fileName
* @param template
*/
public void createFile(Object object, String savePath, String fileName,
Template template) {
String realFileName = savePath + "/" + fileName;
String realSavePath = savePath;
File newsDir = new File(realSavePath);
if (!newsDir.exists()) {
logger.info("create dir :" + realSavePath);
newsDir.mkdirs();
}
//如果已經存在不创建
File realFile = new File(realFileName);
if (realFile.exists()) {
logger.info(fileName + " exists , don't create !");
return;
}
Map<String, Object> rootMap = new HashMap<String, Object>();
rootMap.put("defaultTemplate", object);
try {
// SYSTEM_ENCODING = "UTF-8";
Writer out = new OutputStreamWriter(new FileOutputStream(realFileName), "UTF-8");
template.process(rootMap, out);
logger.info(fileName + " create success !");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
TemplateGenerator mg = new TemplateGenerator();
mg.init();
mg.buildTemplate(true, true, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
默认的模板类:
package com.yancheng.myframe.createTemplate;
/**
* @path com.yancheng.myframe.createTemplate DeaultTemplate.java
* @author yanc
* @createTime Jan 4, 2011 5:26:55 PM
* @description 自动生成dao,service 模板
*/
public class DefaultTemplate {
//~ Field =============================================================================================
private String packagePath; //当前包路径
private String baseDaoPath; //BaseDao接口路径
private String baseDaoImplPath; //BaseDao实现类路径
private String modelPath; //当前实体类路径
private String daoPath; //当前dao接口路径
private String entityName; //当前实体类名称
private String daoName; //当前dao接口名称
private String daoImplName; //dao实现类名称
private String serviceName; //service
private String daoEntity; //dao实体
private String baseDaoName = "BaseDAO";
private String baseDaoImplName = "BaseDAOImpl";
private String baseServiceName = "BaseService";
//~ Get and Set Methods =================================================================================
public String getPackagePath() {
return packagePath;
}
public void setPackagePath(String packagePath) {
this.packagePath = packagePath;
}
public String getBaseDaoPath() {
return baseDaoPath;
}
public void setBaseDaoPath(String baseDaoPath) {
this.baseDaoPath = baseDaoPath;
}
public String getModelPath() {
return modelPath;
}
public void setModelPath(String modelPath) {
this.modelPath = modelPath;
}
public String getDaoName() {
return daoName;
}
public void setDaoName(String daoName) {
this.daoName = daoName;
}
public String getEntityName() {
return entityName;
}
public void setEntityName(String entityName) {
this.entityName = entityName;
}
public String getBaseDaoImplPath() {
return baseDaoImplPath;
}
public void setBaseDaoImplPath(String baseDaoImplPath) {
this.baseDaoImplPath = baseDaoImplPath;
}
public String getDaoPath() {
return daoPath;
}
public void setDaoPath(String daoPath) {
this.daoPath = daoPath;
}
public String getDaoImplName() {
return daoImplName;
}
public void setDaoImplName(String daoImplName) {
this.daoImplName = daoImplName;
}
public String getBaseDaoName() {
return baseDaoName;
}
public void setBaseDaoName(String baseDaoName) {
this.baseDaoName = baseDaoName;
}
public String getBaseDaoImplName() {
return baseDaoImplName;
}
public void setBaseDaoImplName(String baseDaoImplName) {
this.baseDaoImplName = baseDaoImplName;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getDaoEntity() {
return daoEntity;
}
public void setDaoEntity(String daoEntity) {
this.daoEntity = daoEntity;
}
public String getBaseServiceName() {
return baseServiceName;
}
public void setBaseServiceName(String baseServiceName) {
this.baseServiceName = baseServiceName;
}
}
粘贴一个service 模板
package ${defaultTemplate.packagePath};
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import ${defaultTemplate.daoPath};
import ${defaultTemplate.modelPath};
/**
* @description
* @author
*/
@Service
public class ${defaultTemplate.serviceName} extends ${defaultTemplate.baseServiceName}<${defaultTemplate.entityName}, Integer>{
//~ fields =============================================================================================================
private ${defaultTemplate.daoName} ${defaultTemplate.daoEntity};
//~ Method =============================================================================================================
//~ Get and Set Method ===============================================================================================
@Autowired
public void set${defaultTemplate.daoName}(${defaultTemplate.daoName} ${defaultTemplate.daoEntity}) {
super.set${defaultTemplate.baseDaoName}(${defaultTemplate.daoEntity});
this.${defaultTemplate.daoEntity} = ${defaultTemplate.daoEntity};
}
}