若依框架集成EasyExcel后修改代码生成器

一、前言

最近有个项目用的若依,但原版的Excel不是很熟悉,加入EasyExcel依赖后发现代码生成器的注解都是原有的注解,决定修改下模板,方便以后使用。

二、集成EasyExcel 

参考若依官网即可https://doc.ruoyi.vip/ruoyi-vue/document/cjjc.html#%E9%9B%86%E6%88%90easyexcel%E5%AE%9E%E7%8E%B0excel%E8%A1%A8%E6%A0%BC%E5%A2%9E%E5%BC%BA

三、修改代码模板

图片为生成代码方法,

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();
    }
}

导出文件如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值