Struct Util 权威指南 - 基础应用入门实战

853 字
4 分钟
Struct Util 权威指南 - 基础应用入门实战

Struct Util 是一个 Java 语言开发的结构化数据映射处理工具。Struct Util 主要解决两个方面的问题。第一个方面将*.xls, *.csv 等配置友好型数据源转换为业务侧友好型的 bean 结构,对配置数据和使用数据进行解耦,让开发和运营、策划三方实现共赢。第二方面解决了数据表热重载,数据有条件过滤,表结构跨表引用等等应用相关的问题。

StructUtil是博主个人作品, 稍微有自吹自擂的嫌疑, 欢迎:star:收藏。哈哈, 因为是个人作品,应该是足够”权威”了。嘻嘻~~

基础入门#

框架核心由两个注解组成,业务代码也是围绕着两个注解实现的。下面我们根据注解中定义的属性学习一下 @StructSheet 和 @StructField 两个注解。

@StructSheet 注解#

定义数据文件的结构.

注解名称缺省值可选字段备注
fileNameN数据文件名称, 带文件的后缀名. e.g. struct.xlsx
sheetName’Sheet1’Y表单名称. 针对 Excel 文件的包含多个 Sheet
startOrder1Y控制文件读取的开始. 缺省为: 1 从 excel 的 1 行(第一行为 0)或文件的第一行开始
endOrder-1Y控制文件读取的结束. 缺省为:-1
matcherWorkerMatcher.classY自定义 WorkHandler, 可以根据条件指定处理的 StructHandler.
filterStructBeanFilter.classY过滤、筛选符合条件的数据结构.

@StructField 注解#

定义列结构.

注解名称缺省值可选字段备注
nameY数据文件中的列名, 当设置非空字符串时,使用注解的值替代类文件中的字段名
refObject.classY引用其他结构
refGroupBy{}Y当 ref 值有效时, 引用的结构数据根据字段进行分组
refUniqueKey{}Y当 ref 值有效时, 引用的结构数据根据字段转换为 Map
aggregateByY根据父结构中的字段值,对子结构进行聚合. 类似于 groupBy 的功能.
aggregateTypeObject.classY当 aggregateBy 生效时,聚合的集合类型. 不支持 Map
requiredfalseY字段值非空检查. 设置为 True 时, 字段值必须为非 null 的值.
converterY将数据文件中的数据转换为期望的 JO

ref, refGroupBy, refUniqueKey 引用关系,groupby 将子数据集进行分组,uniqueKey 将子数据集的键值对的 key,主要是根据子数据集的字段进行数据划分和处理。

aggregateBy, aggregateType 使用父集合中的数据进行聚合处理,类型进支持数组和 List,暂时不支持聚合键值对。

converter 支持可扩展的字段类型转换器。

定义 Animal 类型#

定义一个 Animal 的 Struct 结构,包含 name age weight 三个字段。结构对应的数据文件为”cfg_animal.xlsx”。

@StructSheet(fileName = "../cfg_animal.xlsx")
public class Animal {
private String name;
private int age;
private int weight;
}

使用 StructWorker 进行数据加载。

@Test
public void test() {
StructWorker<Animal> worker = WorkerUtil.newWorker("./data/", Animal.class);
ArrayList<Animal> list = worker.load(ArrayList::new);
// ...
}

使用 @StructOptional 注解聚合异构对象#

某些业务场景中我们可能需要聚合不同数据结构的类型到同一个表中。

@StructSheet(fileName = "../cfg_animal.xlsx")
public class Animal {
private String name;
private int age;
private int weight;
@StructOptional(value = {
@StructField(ref = ExtraData1.class, refUniqueKey = "id"),
@StructField(ref = ExtraData2.class, refUniqueKey = "id")
})
private Object extra;
}

根据 value 的 @StructField 顺序尝试解析引用数据,一直到找到某个值为止。例如动物的科属目信息,每个动物皆不相同,需要在总 Animal 信息集成。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Struct Util 权威指南 - 基础应用入门实战
https://tinyzzh.github.io/posts/2023-05-01-struct_util_01_usage/
作者
TinyZ Zzh
发布于
2023-05-01
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
TinyZ Zzh
专注于高并发服务器、网络游戏相关(Java、PHP、Unity3D、Unreal Engine等)技术,热爱游戏事业, 正在努力实现自我价值当中。
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
211
分类
38
标签
200
总字数
337,853
运行时长
0
最后活动
0 天前

文章目录