一、前言
最近有个项目用的若依,但原版的Excel不是很熟悉,加入EasyExcel依赖后发现代码生成器的注解都是原有的注解,决定修改下模板,方便以后使用。
二、集成EasyExcel
三、修改代码模板
图片为生成代码方法,
VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType());
在getTemplateList()方法中会读取代码生成模板
可以看到有Java各个层级包括Vue的模板文件;涉及导出的有Controller以及实体类代码
进入domian.java.vm的模板文件如下
首先import部分的包要修改,其次是第二张图代码
修改完如下(注意原代码中对于字段中文名中括号有判断限制,这个可以自行调整),同时我去掉了Getter和Setter方法,改为Lombok注解
package ${packageName}.domain;
#foreach ($import in $importList)
import ${import};
#end
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.alibaba.excel.annotation.ExcelProperty;
#if($table.crud || $table.sub)
import com.ruoyi.framework.web.domain.BaseEntity;
#elseif($table.tree)
import com.ruoyi.framework.web.domain.TreeEntity;
#end
/**
* ${functionName}对象 ${tableName}
*
* @author ${author}
* @date ${datetime}
*/
#if($table.crud || $table.sub)
#set($Entity="BaseEntity")
#elseif($table.tree)
#set($Entity="TreeEntity")
#end
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ${ClassName} extends ${Entity}
{
private static final long serialVersionUID = 1L;
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
/** $column.columnComment */
#if($column.list)
#set($parentheseIndex=$column.columnComment.indexOf("("))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end
#if($column.javaType == 'Date')
@DateTimeFormat("yyyy-MM-dd HH:mm-ss")
@ExcelProperty("${comment}" )
#else
@ExcelProperty("${comment}")
#end
#end
private $column.javaType $column.javaField;
#end
#end
#if($table.sub)
/** $table.subTable.functionName信息 */
private List<${subClassName}> ${subclassName}List;
#end
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
#foreach ($column in $columns)
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
#set($AttrName=$column.javaField)
#else
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#end
.append("${column.javaField}", get${AttrName}())
#end
#if($table.sub)
.append("${subclassName}List", get${subClassName}List())
#end
.toString();
}
}
Controller模板修改如下(只修改了导出相关调整为官方模板中新增的exportEasyExcel方法);
/**
* 导出${functionName}列表
*/
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
@Log(title = "${functionName}", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ${ClassName} ${className})
{
List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);
util.exportEasyExcel(response, list, "${functionName}数据");
}
注意:
1、导出文件中会有未引用的包com.fasterxml.jackson.annotation.JsonFormat,此处需要修改
VelocityUtils.java.getImportList方法,注释掉即可
2、继承的BaseEntity需要添加@ExcelIgnore注解 (自行判断是否需要导出)
四、测试
建表语句
CREATE TABLE "ONECODE"."A_TEST"
( "XMDM" VARCHAR2(100),
"DZJGH" VARCHAR2(100),
"XMMC" VARCHAR2(100),
"HTRQ" DATE
)
TABLESPACE "ONECODE" ;
COMMENT ON COLUMN ONECODE.A_TEST.XMDM IS '项目代码';
COMMENT ON COLUMN ONECODE.A_TEST.DZJGH IS '监管号';
COMMENT ON COLUMN ONECODE.A_TEST.XMMC IS '项目名称';
COMMENT ON COLUMN ONECODE.A_TEST.HTRQ IS '合同日期';
生成后代码如下:
package com.ruoyi.project.system.domain;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.framework.web.domain.BaseEntity;
/**
* 【请填写功能名称】对象 a_test
*
* @author zeh.su
* @date 2024-12-17
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ATest extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 项目代码 */
@ExcelProperty("项目代码")
private String xmdm;
/** 监管号 */
@ExcelProperty("监管号")
private String dzjgh;
/** 项目名称 */
@ExcelProperty("项目名称")
private String xmmc;
/** 合同日期 */
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
@ExcelProperty("合同日期" )
private Date htrq;
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("xmdm", getXmdm())
.append("dzjgh", getDzjgh())
.append("xmmc", getXmmc())
.append("htrq", getHtrq())
.toString();
}
}
导出文件如下