自动生成dao,service

最近将原来由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};
	}
	
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java开发中,我们经常需要使用到DAO(Data Access Object)、Action、Service和IML(Implentation)等组件。这些组件可以帮助我们实现数据库操作、业务逻辑处理等工作。 首先,DAO是数据访问对象,它用于封装对数据库的操作。在Java中,我们可以使用MyBatis、Hibernate等框架自动生成DAO,这样可以避免手动编写大量的数据库操作代码,提高开发效率。DAO的主要作用是封装对数据库的增删改查等操作,同时也可以处理事务。 其次,Action是控制器组件,用于接收用户请求并调用Service层处理业务逻辑。在开发Web应用时,我们可以使用框架如Struts、Spring MVC等自动生成Action,这样可以简化请求的处理过程。Action负责接收用户请求参数、调用Service层方法并将结果返回给用户。 Service是业务逻辑层组件,它负责处理具体的业务逻辑。Service层通常需要调用DAO层进行数据库操作,并且可以进行一些复杂的业务处理,如事务管理、数据验证等。通过自动生成Service,可以减少重复的业务逻辑编写,提高代码的复用性和维护性。 IML是Implentation的缩写,它表示实现类。在Java中,我们可以通过接口和实现类的方式来组织代码结构。使用IML可以将接口和具体的实现分离,提高代码的灵活性。比如,我们可以通过接口定义DAOService的方法,在IML中实现具体的功能。 总结起来,自动生成DAO、Action、Service和IML等组件可以提高开发效率,减少重复的代码编写,同时也有助于代码的组织和维护。通过框架和工具的支持,我们可以更加专注于业务逻辑的实现,而不必过多关注底层的数据库操作和请求处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值