用户希望在导出Excel时,能够配置SQL语句来加载数据到缓存进行匹配,实现更灵活的数据转换功能。
文件: backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelSqlCacheFormat.java
功能特性:
文件: backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/convert/ExcelSqlCacheConvert.java
核心特性:
ConcurrentHashMap存储SQL查询结果文件: backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/SqlCacheConfigService.java
功能特性:
文件: backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/config/SqlCacheConfigInitializer.java
功能特性:
@Data
@ExcelIgnoreUnannotated
public class XgStudentMsgExportVo implements Serializable {
/**
* 班级名称 - 使用SQL缓存转换
*/
@ExcelProperty(value = "班级名称", converter = ExcelSqlCacheConvert.class)
@ExcelSqlCacheFormat(
sqlKey = "student_class_info", // 对应注册的SQL键
valueColumn = "id", // 值字段名
labelColumn = "name" // 标签字段名
)
private String className;
}
@RestController
public class XgStudentMsgController extends BaseController {
/**
* 预加载导出所需的SQL缓存数据
*/
private void preloadExportSqlData() {
try {
SqlCacheConfigService sqlCacheConfigService = SpringUtils.getBean(SqlCacheConfigService.class);
// 预加载SQL配置
sqlCacheConfigService.preloadSqlData("student_class_info");
sqlCacheConfigService.preloadSqlData("college_info");
log.info("SQL缓存预加载完成");
} catch (Exception e) {
log.warn("SQL缓存预加载失败,将使用默认处理方式", e);
}
}
}
// 班级信息查询
"student_class_info" -> "SELECT class_id as id, class_name as name FROM xg_class WHERE deleted = 0"
// 学院信息查询
"college_info" -> "SELECT college_id as id, college_name as name FROM xg_college WHERE deleted = 0"
// 复杂关联查询
"class_with_teacher" -> """
SELECT c.class_id as id,
CONCAT(c.class_name, ' (', u.nick_name, ')') as name
FROM xg_class c
LEFT JOIN sys_user u ON c.class_teacher_id = u.user_id
WHERE c.deleted = 0
"""
ConcurrentHashMap避免重复查询ConcurrentHashMap保证线程安全| 特性 | 字典转换 | SQL缓存转换 |
|---|---|---|
| 数据源 | 字典表 | 任意表 |
| 配置方式 | 字典类型 | SQL语句 |
| 灵活性 | 固定格式 | 高度灵活 |
| 性能 | 预加载缓存 | 预加载缓存 |
| 适用场景 | 标准字典 | 复杂业务数据 |
ExcelSqlCacheFormat注解ExcelSqlCacheConvert转换器SqlCacheConfigService配置服务SqlCacheConfigInitializer初始化器本次开发成功实现了SQL缓存导出配置功能,为Excel导出提供了强大的数据转换能力:
ConcurrentHashMap实现高性能缓存该功能特别适用于需要从多个业务表获取数据进行导出的场景,能够有效解决传统导出方式中的性能瓶颈问题,为项目的导出功能提供了强有力的技术支撑。