`
kaowww153
  • 浏览: 74522 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

自动生成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
分享到:
评论

相关推荐

    快速生成dao、service、controller等相关代码

    "快速生成DAO、Service、Controller等相关代码"的标题和描述暗示了一个针对这种情况的解决方案,即一个名为"723.crud-intellij-plugin__mars05"的IntelliJ IDEA插件。 IntelliJ IDEA是一款流行的Java集成开发环境,...

    推荐个自动生成JAVA MVC SSM SSH多层代码的工具(dao,service,controller)

    推荐个自动生成JAVA MVC多层代码的工具(dao,service,controller)(dao,service,controller) hibernate的hbm.xml ibatis的mapper.xml jsp文件都可以生成

    Java自动生成entity、dao、service、controller代码

    Java自动生成entity、dao、service、controller代码

    java 里 自动生成 dao 工具的代码

    综上所述,"java 里 自动生成 DAO 工具的代码"是为了提升Java Web开发效率而设计的,它结合了ORM框架,如Hibernate和MyBatis,能根据数据库模式自动生成DAO层代码,使开发者可以更专注于业务逻辑。在实际项目中,...

    ftl模板自动生成dao、service层功能,包括实现

    ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现...

    mvc代码自动生成

    当我们谈论"mvc代码自动生成"时,通常指的是利用工具或库自动化创建DAO(数据访问对象)、Service和Controller层的代码,从而减少手动编写这些常见组件的时间和错误。 **DAO层**: DAO层是应用程序与数据库交互的...

    自动生成Dao、Service工具类

    Spring+SpringMVC+Mybatis+Redis+OSS项目工具类大合集

    自动生成dao的eclipse插件autoDAO

    “自动生成DAO”的主要目标是通过自动化过程减少手动创建DAO类的时间和精力。DAO是一种设计模式,用于在应用程序和数据库之间提供一个抽象层,它允许程序员独立于特定的数据库实现进行编码。当项目中涉及多个表或者...

    逆向工程自动生成mapper dao service

    Mybatis逆向工程工具是Mybatis框架的一部分,它能够根据数据库表结构自动生成对应的Java实体类、Mapper接口、Mapper XML配置文件以及Service接口和服务实现类。这样,开发者就不必手动编写这些基础代码,从而将更多...

    SpringBoot快速开发平台 可一键生成Dao/Service/Controller/VUE

    MySQL数据库表 快速批量生成Dao、Service、Controller以及Vue页面 生成后台管理页面的增删改查,只需要编写业务逻辑的代码,生成的代码。 生成的接口灵活可满足95%的基本的增删改查需求 集成了swagger文档支持,方便...

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    生成DAO代码时,一般会包括对数据库的基本CRUD(Create、Read、Update、Delete)操作的方法,这些方法通过SQL查询与数据库进行交互。 4. **RowMapper**: 在Spring JDBC中,RowMapper接口用于将数据库查询结果的一...

    java 自动生成代码 entity,dao,service

    为了解决这个问题,"java 自动生成代码 entity,dao,service" 的工具应运而生。这个工具旨在帮助开发者快速生成这些基础代码,节省时间,让开发者能更专注于业务逻辑的实现。 首先,我们来看Entity层。Entity通常...

    自动生成dao层和service层代码demo

    闲暇时间,想撸一下代码的时候,可以拿这个练手;...配置好数据库,自动生成dao层和service层代码,可以优化结构,输出自己想要的内容,也可控制不生成service层,或者进一步开发,生成controller层代码,欢迎更新;

    java逆向自动生成service层

    Java逆向生成service:包括保存,更新,批量保存,批量更新的方法声明等。配套的还有entity,dao层,dao.xml,serviceImpl的生成文件,在其他下载资源中。

    Spring Boot Mybatis 自动生成Entity,controller、serviceImpl ,Dao,方便开发,无需手写

    本项目“Spring Boot Mybatis 自动生成Entity,controller、serviceImpl,Dao”正是这样一个工具,旨在提升开发效率。 1. **Spring Boot**: Spring Boot是Spring框架的一个扩展,旨在简化Spring应用的初始搭建...

    自动生成MVC中的Service层、Dao层及Model层代码

    通过自动生成Dao层代码,我们可以快速得到数据库操作的模板,如查询、插入、更新和删除等方法。 Model层,也称为实体层,它代表了数据库中的表或集合对象。Model类通常包含与数据库表字段相对应的属性,并提供...

    mybatis-generator自动生成代码[增加Service的生成]

    标题 "mybatis-generator自动生成代码[增加Service的生成]" 指的是MyBatis Generator(MBG)这一工具,它能够根据数据库表结构自动产生Java持久层代码,大大减轻了开发人员的手动编码工作。在描述中提到"增加Service...

    代码生成器,自动生成Mapper,Controller,service文件

    本话题将详细讲解"代码生成器"这一技术,特别是其在自动生成Mapper、Controller和Service文件中的应用。 一、代码生成器的概念与作用 代码生成器,顾名思义,是一个程序或工具,它根据用户提供的配置或模板,自动...

    自动根据数据库生成JAVA BEAN和DAO

    3. 代码生成器:利用工具或框架(如MyBatis的generator、Hibernate的hibernate-tools等),根据数据库连接信息和表名,自动生成Java Bean和DAO类。生成器会根据表的字段生成Bean的属性,根据表的主键生成Bean的...

Global site tag (gtag.js) - Google Analytics