最近将原来由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};
}
}
分享到:
相关推荐
"快速生成DAO、Service、Controller等相关代码"的标题和描述暗示了一个针对这种情况的解决方案,即一个名为"723.crud-intellij-plugin__mars05"的IntelliJ IDEA插件。 IntelliJ IDEA是一款流行的Java集成开发环境,...
推荐个自动生成JAVA MVC多层代码的工具(dao,service,controller)(dao,service,controller) hibernate的hbm.xml ibatis的mapper.xml jsp文件都可以生成
Java自动生成entity、dao、service、controller代码
综上所述,"java 里 自动生成 DAO 工具的代码"是为了提升Java Web开发效率而设计的,它结合了ORM框架,如Hibernate和MyBatis,能根据数据库模式自动生成DAO层代码,使开发者可以更专注于业务逻辑。在实际项目中,...
ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现...
当我们谈论"mvc代码自动生成"时,通常指的是利用工具或库自动化创建DAO(数据访问对象)、Service和Controller层的代码,从而减少手动编写这些常见组件的时间和错误。 **DAO层**: DAO层是应用程序与数据库交互的...
Spring+SpringMVC+Mybatis+Redis+OSS项目工具类大合集
“自动生成DAO”的主要目标是通过自动化过程减少手动创建DAO类的时间和精力。DAO是一种设计模式,用于在应用程序和数据库之间提供一个抽象层,它允许程序员独立于特定的数据库实现进行编码。当项目中涉及多个表或者...
Mybatis逆向工程工具是Mybatis框架的一部分,它能够根据数据库表结构自动生成对应的Java实体类、Mapper接口、Mapper XML配置文件以及Service接口和服务实现类。这样,开发者就不必手动编写这些基础代码,从而将更多...
MySQL数据库表 快速批量生成Dao、Service、Controller以及Vue页面 生成后台管理页面的增删改查,只需要编写业务逻辑的代码,生成的代码。 生成的接口灵活可满足95%的基本的增删改查需求 集成了swagger文档支持,方便...
生成DAO代码时,一般会包括对数据库的基本CRUD(Create、Read、Update、Delete)操作的方法,这些方法通过SQL查询与数据库进行交互。 4. **RowMapper**: 在Spring JDBC中,RowMapper接口用于将数据库查询结果的一...
为了解决这个问题,"java 自动生成代码 entity,dao,service" 的工具应运而生。这个工具旨在帮助开发者快速生成这些基础代码,节省时间,让开发者能更专注于业务逻辑的实现。 首先,我们来看Entity层。Entity通常...
闲暇时间,想撸一下代码的时候,可以拿这个练手;...配置好数据库,自动生成dao层和service层代码,可以优化结构,输出自己想要的内容,也可控制不生成service层,或者进一步开发,生成controller层代码,欢迎更新;
Java逆向生成service:包括保存,更新,批量保存,批量更新的方法声明等。配套的还有entity,dao层,dao.xml,serviceImpl的生成文件,在其他下载资源中。
本项目“Spring Boot Mybatis 自动生成Entity,controller、serviceImpl,Dao”正是这样一个工具,旨在提升开发效率。 1. **Spring Boot**: Spring Boot是Spring框架的一个扩展,旨在简化Spring应用的初始搭建...
通过自动生成Dao层代码,我们可以快速得到数据库操作的模板,如查询、插入、更新和删除等方法。 Model层,也称为实体层,它代表了数据库中的表或集合对象。Model类通常包含与数据库表字段相对应的属性,并提供...
标题 "mybatis-generator自动生成代码[增加Service的生成]" 指的是MyBatis Generator(MBG)这一工具,它能够根据数据库表结构自动产生Java持久层代码,大大减轻了开发人员的手动编码工作。在描述中提到"增加Service...
本话题将详细讲解"代码生成器"这一技术,特别是其在自动生成Mapper、Controller和Service文件中的应用。 一、代码生成器的概念与作用 代码生成器,顾名思义,是一个程序或工具,它根据用户提供的配置或模板,自动...
3. 代码生成器:利用工具或框架(如MyBatis的generator、Hibernate的hibernate-tools等),根据数据库连接信息和表名,自动生成Java Bean和DAO类。生成器会根据表的字段生成Bean的属性,根据表的主键生成Bean的...