当前位置: 首页 > wzjs >正文

彩库宝典官方app版下载应用宝aso优化

彩库宝典官方app版下载,应用宝aso优化,天津建筑工程信息招标网,电商网站开发重难点目录 引言一、需求场景二、实现思路三、代码实现1、自定义注解 ExcelSelected2、码表实体与数据库查询3、全局转换器 GlobalCodeConverter4、实体类使用注解5、注册全局转换器 四、效果验证五、总结 引言 在实际业务中,我们经常需要将数据库中的码值(如 …

目录

  • 引言
  • 一、需求场景
  • 二、实现思路
  • 三、代码实现
    • 1、自定义注解 @ExcelSelected
    • 2、码表实体与数据库查询
    • 3、全局转换器 GlobalCodeConverter
    • 4、实体类使用注解
    • 5、注册全局转换器
  • 四、效果验证
  • 五、总结

引言

  在实际业务中,我们经常需要将数据库中的码值(如 1, 2, 3)在导出Excel时显示为中文(如“进行中”、“已完成”、“已取消”),而在导入Excel时,用户填写的中文需要自动转换为对应的码值。本文将介绍如何通过全局转换器(GlobalCodeConverter)自定义注解实现这一功能,结合数据库动态查询码表,提升代码复用性和可维护性。


一、需求场景

假设有一个订单表,字段 trans_status 存储状态码(1: 进行中,2: 已完成,3: 已取消),需满足以下需求

  1. 导出Excel时:将 trans_status=1 转换为“进行中”显示
  2. 导入Excel时:用户输入“进行中”,自动转换为 1 存储到数据库
  3. 支持多码表:如性别、优先级等字段也需要类似处理

二、实现思路

  1. 自定义注解:标记需要转换的字段,并指定码表类型
  2. 全局转换器:拦截注解标记的字段,动态查询数据库获取码值映射关系
  3. 缓存优化:减少频繁查询数据库,提升性能

三、代码实现

1、自定义注解 @ExcelSelected

  • 用于标记需要转换的字段,指定码表类型
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelSelected {/*** 码表类型(如 trans_status)*/String codeField();
}

2、码表实体与数据库查询

  • 设计码表结构(如 sys_dict
CREATE TABLE sys_dict (type VARCHAR(50) COMMENT '码表类型(如trans_status)',code VARCHAR(20) COMMENT '码值',name VARCHAR(50) COMMENT '显示名称'
);

3、全局转换器 GlobalCodeConverter

  • 实现 Converter 接口,处理导入导出时的转换逻辑
  • getCodeMap方法中可以通过SpringUtil.getBean(SysDictService.class)获取数据库码值
public class GlobalCodeConverter implements Converter<String> {private static final Map<String, Map<String, String>> CACHE = new ConcurrentHashMap<>();@Overridepublic Class<String> supportJavaTypeKey() {return String.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}// 读取Excel时的转换(中文->码值)@Overridepublic String convertToJavaData(ReadConverterContext<?> context) {String cellValue = context.getReadCellData().getStringValue();Field field = context.getContentProperty().getField();ExcelSelected annotation = field.getAnnotation(ExcelSelected.class);if (annotation != null) {Map<String, String> codeMap = getCodeMap(annotation.codeField());return codeMap.entrySet().stream().filter(entry -> entry.getValue().equals(cellValue)).map(Map.Entry::getKey).findFirst().orElse(null);}return cellValue;}// 写入Excel时的转换(码值->中文)@Overridepublic WriteCellData<String> convertToExcelData(WriteConverterContext<String> context) {String value = context.getValue();Field field = context.getContentProperty().getField();ExcelSelected annotation = field.getAnnotation(ExcelSelected.class);if (annotation != null) {Map<String, String> codeMap = getCodeMap(annotation.codeField());return new WriteCellData<>(codeMap.get(value));}return new WriteCellData<>(value);}// 获取码表数据private Map<String, String> getCodeMap(String codeType) {// 带缓存的码表查询return CACHE.computeIfAbsent(codeType, k -> {// 实际查询数据库的代码(示例)Map<String, String> map = new HashMap<>();map.put("1", "进行中");map.put("2", "已完成");map.put("3", "已取消");return map;});}
}

4、实体类使用注解

  • 在需要转换的字段上添加 @ExcelSelected
public class OrderVO {@ExcelProperty("订单状态")@ExcelSelected(codeField = "trans_status")private String transStatus;
}

5、注册全局转换器

  • 导出/导入时注册转换器
// 导出
EasyExcel.write(fileName, OrderVO.class).registerConverter(new GlobalCodeConverter()).sheet().doWrite(orders);
// 导入
EasyExcel.read(fileName, OrderVO.class, new PageReadListener<>(list -> {})).registerConverter(new GlobalCodeConverter()).sheet().doRead();

四、效果验证

  • 导出Excel:trans_status=1 显示为“进行中”
  • 导入Excel:用户输入“进行中”,自动转换为 1 存入数据库

五、总结

  通过自定义注解全局转换器,实现了码值与中文的动态转换,代码简洁且易于扩展。这里可以结合之前写的文章EasyExcel自定义下拉注解的三种实现方式实现下拉框选择,进一步提升用户体验。

http://www.dtcms.com/wzjs/236609.html

相关文章:

  • 石家庄网站排名企业网络营销推广方案策划范文
  • 做的好的个人网站知乎网站自然排名怎么优化
  • 用易语言做网站如何营销网站建设选择原则
  • 长沙网站建设 个人互动营销成功案例
  • 深圳科源建设集团有限公司网站搭建一个网站需要什么
  • 福田瑞沃大金刚优化大师软件大全
  • 顺德公司做网站推广平台开户代理
  • 商会网站的建设优化落实疫情防控
  • 单页式网站模板昆明seo技术培训
  • 做餐饮网站的目的与意义今日搜索排行榜
  • 济南网站制作最有效的推广学校的方式
  • 大航母网站建设案例京津冀协同发展
  • 江苏国泰做的网站案例游戏优化是什么意思?
  • 缅甸网站赌博代理怎么做百度推广中心
  • 网站做百度推广需要什么材料知乎seo排名帝搜软件
  • 开发公司支付给业主的购房补贴网站推广优化价格
  • 苏州做视频网站广告公司产品推广建议
  • wordpress评论插件6seo优化方案总结
  • 青岛网景互联网站建设公司免费的行情网站app软件
  • 阿里巴巴开通诚信通后网站怎么做谷歌的推广是怎么样的推广
  • 广西城乡建设网站如何制作自己的公司网站
  • 设计出色的网站百度网页版主页网址
  • 广州活动策划公司排名百度seo插件
  • 知识库主题 wordpress西安百度seo推广
  • 徐州哪家公司做网站水平好官方百度app下载安装
  • 长沙县不错的建站按效果付费百度推广登录后台
  • 网站衣服模特怎么做免费域名申请网站大全
  • wordpress seo教程 百度网盘
  • 怎样在微信里做网站宁波seo关键词培训
  • 二级网站怎样做排名郑州seo外包顾问热狗