若依@Excel注解自动获取导出字段,字典解析

这篇具有很好参考价值的文章主要介绍了若依@Excel注解自动获取导出字段,字典解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

若依系统中实体类导出字段使用了@Execl 如不是若依系统 最后附有excel接口

普通导出:

@Excel(name = "单位")

private String unit;

带字典解析导出:

@Excel(name = "状态", dictType = "sys_true_false")

private Integer attributeCategory;

系统后台字典配置:

新增的字典也会存在redis缓存中(直接查询缓存或mysql都行)

带上注解导出后 通过实体类即可获取要导出的字段 无需再写导出的string数组


在实体类用excel注解handler属性指定自定义的数据处理器,开发合集,java,servlet,mybatis在实体类用excel注解handler属性指定自定义的数据处理器,开发合集,java,servlet,mybatis

目录

获取导出字段

实例使用方法

其他方法

Excel类

获取导出字段

 导出样式

在实体类用excel注解handler属性指定自定义的数据处理器,开发合集,java,servlet,mybatis

//Test为你的实体类
//提前取表头 和引用字典
List<String> chineseNameList = new ArrayList<>();
List<String> englishNameList = new ArrayList<>();
//英文字段 字典名
Map<String, String> dictTypeMap = new HashMap<>();
Field[] fs = Test.class.getDeclaredFields();
for (Field f : fs) {
    Excel excel = f.getAnnotation(Excel.class);
    if (excel != null) {
        chineseNameList.add(excel.name());
        englishNameList.add(f.getName());
        String dictType = excel.dictType();
        //获取配置dictType的字段
        if (StringUtils.isNotEmpty(dictType)) {
            dictTypeMap.put(f.getName(), dictType);
        }
    }
}
//用到字典的字段及解析
Map<String, List<SysDictData>> dictMap = new HashMap();
for (String key : dictTypeMap.keySet()) {
    //字典值解析
    List<SysDictData> sysDictData = DictUtils.getDictCache(dictTypeMap.get(key));
    //key 英文字段名 value 这个字段的解析
    dictMap.put(key, sysDictData);
}
//中文表头
String[] chineseTitle = chineseNameList.toArray(new String[chineseNameList.size()]);
//英文表头(字典解析使用)
String[] englishTitle = englishNameList.toArray(new String[englishNameList.size()]);
//使用方法 拿到数据list后 循环每行数据 对比每个字段

实例使用方法

    /**
     * 塞入数据+字典处理
     *
     * @param cyclesList 你的数据list
     * @param fieldNameList 英文表头
     * @param dictMap 字典map
     * @return
     */
public List<List<String>> dictData(List<BasicFarmer> cyclesList, String[] fieldNameList, Map<String, List<SysDictData>> dictMap) {
        List<Map> maps = JSON.parseArray(JSON.toJSONString(cyclesList), Map.class);
        List<List<String>> exportData = new ArrayList<>();
        //循环查询出的数据
        for (Map map : maps) {
            List<String> value = new ArrayList<>();
            //根据需要的字段塞入数据
            for (String s : fieldNameList) {
                if (map.get(s) != null) {
                    String parseValue = map.get(s).toString();
                    //如果字典中包含了这个字段
                    if (dictMap.containsKey(s)) {
                        List<SysDictData> sysDictData = dictMap.get(s);
                        for (SysDictData sysDictDatum : sysDictData) {
                            //判断数据和字典值
                            if (map.get(s).toString().equals(sysDictDatum.getDictValue())) {
                                parseValue = sysDictDatum.getDictLabel();
                            }
                        }
                        value.add(parseValue);
                        continue;
                    }
                    value.add(parseValue);
                } else {
                    value.add(null);
                }
            }
            exportData.add(value);
        }
        return exportData;
    }

其他方法

    /**
     * 获取字典缓存
     *
     * @param key 参数键
     * @return dictDatas 字典数据列表
     */
    public static List<SysDictData> getDictCache(String key) {
        Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
        if (StringUtils.isNotNull(cacheObj)) {
            return StringUtils.cast(cacheObj);
        }
        return null;
    }


    /**
     * 获取类型为requiredType的对象
     *
     * @param clz
     * @return
     * @throws BeansException
     *
     */
    public static <T> T getBean(Class<T> clz) throws BeansException
    {
        T result = (T) beanFactory.getBean(clz);
        return result;
    }

    /**
     * 获得缓存的基本对象。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    public <T> T getCacheObject(final String key) {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }

Excel接口

​
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
import com.hnxr.dsp.common.utils.poi.ExcelHandlerAdapter;

/**
 * 自定义导出Excel数据注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
    /**
     * 导出时在excel中排序
     */
    public int sort() default Integer.MAX_VALUE;

    /**
     * 导出到Excel中的名字.
     */
    public String name() default "";

    /**
     * 日期格式, 如: yyyy-MM-dd
     */
    public String dateFormat() default "";

    /**
     * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
     */
    public String dictType() default "";

    /**
     * 读取内容转表达式 (如: 0=男,1=女,2=未知)
     */
    public String readConverterExp() default "";

    /**
     * 分隔符,读取字符串组内容
     */
    public String separator() default ",";

    /**
     * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
     */
    public int scale() default -1;

    /**
     * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
     */
    public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;

    /**
     * 导出类型(0数字 1字符串)
     */
    public ColumnType cellType() default ColumnType.STRING;

    /**
     * 导出时在excel中每个列的高度 单位为字符
     */
    public double height() default 14;

    /**
     * 导出时在excel中每个列的宽 单位为字符
     */
    public double width() default 16;

    /**
     * 文字后缀,如% 90 变成90%
     */
    public String suffix() default "";

    /**
     * 当值为空时,字段的默认值
     */
    public String defaultValue() default "";

    /**
     * 提示信息
     */
    public String prompt() default "";

    /**
     * 设置只能选择不能输入的列内容.
     */
    public String[] combo() default {};

    /**
     * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
     */
    public boolean isExport() default true;

    /**
     * 另一个类中的属性名称,支持多级获取,以小数点隔开
     */
    public String targetAttr() default "";

    /**
     * 是否自动统计数据,在最后追加一行统计数据总和
     */
    public boolean isStatistics() default false;

    /**
     * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
     */
    public Align align() default Align.AUTO;

    /**
     * 自定义数据处理器
     */
    public Class<?> handler() default ExcelHandlerAdapter.class;

    /**
     * 自定义数据处理器参数
     */
    public String[] args() default {};

    public enum Align
    {
        AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
        private final int value;

        Align(int value)
        {
            this.value = value;
        }

        public int value()
        {
            return this.value;
        }
    }

    /**
     * 字段类型(0:导出导入;1:仅导出;2:仅导入)
     */
    Type type() default Type.ALL;

    public enum Type
    {
        ALL(0), EXPORT(1), IMPORT(2);
        private final int value;

        Type(int value)
        {
            this.value = value;
        }

        public int value()
        {
            return this.value;
        }
    }

    public enum ColumnType
    {
        NUMERIC(0), STRING(1), IMAGE(2);
        private final int value;

        ColumnType(int value)
        {
            this.value = value;
        }

        public int value()
        {
            return this.value;
        }
    }
}

方法适用若依系统 和内部的@Excel方法

大家根据需求调整代码

有遇到什么问题可以留言告诉我哦 欢迎评论区讨论😪文章来源地址https://www.toymoban.com/news/detail-673150.html

到了这里,关于若依@Excel注解自动获取导出字段,字典解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 若依框架自定义导出Excel多sheet页+合并单元格(Poi)

    先看效果:     在用若依框架是发现自带的导出功能中并不能导出多个sheet和合并单元格,所以我在这里做了修改希望可以帮到你,用到的点个赞呗! 我们先一步步来 整个程序的思路为先返回下载地址,然后根据下载地址去下载excel 首先是我们需要excel的下载地址,这里我们

    2024年02月03日
    浏览(31)
  • java 实现 excel 自定义样式和字段导出

     java 功能中,有一个功能是大家经常做的,就是excel导出,简单的excel导出 可以直接用阿里的easyExcel添加注解自动导出来某些固定字段就行了,这个是比较简单的导出,本文就不作过多赘述  这篇文章主要是针对,某些页面的导出,比如说按照页面上的表格的样式导出数据

    2024年02月09日
    浏览(29)
  • 若依使用easyexcel读取解析excel文件示例

    睿洛医疗 目标:结构化自定义列数和列标题的excel数据。   创建数据类 创建监听类 创建数据类 创建监听类 参考:EasyExcel

    2024年02月11日
    浏览(29)
  • java中用SXSSFWorkbook把多个字段的list数据和单个实体dto导出到excel如何导出到多个sheet页详细实例?

    要使用SXSSFWorkbook将多个字段的List数据和单个实体DTO导出到多个Sheet页,你可以按照以下步骤进行操作: 创建一个SXSSFWorkbook对象作为工作簿。 针对每个字段的List数据,创建一个新的Sheet页,并将数据写入该Sheet页。 创建一个新的Sheet页,用于单个实体DTO的数据。 将单个实体

    2024年02月11日
    浏览(28)
  • jsqlparser解析sql获取表名,字段等

    在项目中需要多sql进行统一拦截处理,但是传入的sql千奇百怪,并有一些逻辑判断,如只对哪张表处理之类,因此需要对sql进行解析后,进行相关逻辑处理。 这里使用 jsqlparser 工具进行sql解析。 maven组件引入 使用方式 输出结果:

    2024年02月16日
    浏览(37)
  • phpspreadsheet导出excel自动获得列,数字下标

    报错Invalid cell coordinate [1,下标超过26个字母 样式 https://blog.csdn.net/qq_34631220/article/details/130628902

    2024年02月11日
    浏览(27)
  • python接口自动化封装导出excel方法和读写excel数据

    一、首先需要思考,我们在页面导出excel,用python导出如何写入文件的 封装前需要确认python导出excel接口返回的是一个什么样的数据类型 如下:我们先看下不对返回结果做处理,直接接收数据类型是一个对象,无法获取返回值 此时我们需要对返回数据做处理,如下; respons

    2024年02月16日
    浏览(39)
  • hutool poi、apache poi实现导入导出以及解析excel

    一、前言 看了例子之后后续需要更加深入学习或者更多理解其他API的话,建议看官方文档。hutool项目是中国人维护的,有中文文档,阅读起来很方便。apache poi比较底层一点,可以更加自由去二次开发自己所需的功能。 hutool官方文档 hutool官方gitee apache poi官方文档 二、基于

    2024年02月09日
    浏览(41)
  • easyexcel根据模板导出Excel文件,表格自动填充问题

    同事在做easyexcel导出Excel,根据模板导出的时候,发现导出的表格,总会覆盖落款的内容。 这就很尴尬了,表格居然不能自动填充,直接怒喷工具,哈哈。 然后一起看了一下这个问题。 我找了自己的系统中关于表格导出的页面,导出了一下,发现可以正常扩充。 于是排查问

    2024年02月06日
    浏览(40)
  • 【Spring Boot】自动配置及重要注解解析

    1、springboot自动配置了哪些功能 1)tomcat的自动配置 引入了tomcat的相关依赖 2)自动配置springmvc及常用功能 我们在主启动类中加两行代码,查看一下spring boot加载了哪些组件 通过在控制台输出中搜索,我们可以发现转发请求的dispatcherServlet、解决乱码的characterEncodingFilter还有视

    2023年04月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包