-
Notifications
You must be signed in to change notification settings - Fork 8
05.panda importor
Bing edited this page Jul 27, 2018
·
1 revision
导入模块,支持Excel文件导入到数据库的表中,底层是基于POI的XSSF方式实现的导入,这种方式优点是内存占用低,支持大数量的导入,缺点是支持Excel 2007 OOXML (.xlsx)。如果像实现低版本格式的导入,请自行扩展相应接口。
包含导入方案和映射规则,一个导入方案对应着多个映射规则
- 导入方案表示:Excel数据导入什么EntityManagerFactory的什么实体类对应的数据库表里
- 映射规则表示:Excel哪一列的数据,经过什么样的处理,赋值给实体类的什么属性
- 新建一个导入方案,编码为001(按你们自己的规则取名)
- 为导入方案取一个好识别的名称,如:用户数据导入
- 如果项目有多个数据源的话,选择一个需要导入的数据源对应的EntityManagerFactory
- 选择要导入哪个实体类
- 如果需要指定导入特定的Sheet页,则可以填写具有的Sheet页名称,否则,导入所有的Sheet页
- 保存配置好的导入方案
- 点击创建映射规则按钮,生成相应的映射规则
- 遍历实体类的所有字段,忽略@Transient字段、复杂类型字段和已经添加过的映射规则的字段
- 设置实体属性为字段名称和增序设置Excel序号
- 获取字段注解@PropertyDef,存在,设置映射规则的名称为@PropertyDef的label属性,否则,设置为字段的名称
- 单元格前置解释器,此时,获取到的是Excel单元格里面最原始的字符串
- 将单元格前解释理解释后的值作为输入,如果配置了数据映射,则先进行数据映射
- 根据单元格对应的实体类属性的类型,获取一个类型转换器,用类型转换器将数据映射后的结果转换成属性的类型,
- 如果转换失败,忽略错误格式数据设置为true,则跳过当前单元格,否则终止导入
- 类型转换器的结果作为输入,经过单元格后置解释器解释后的结果作为最终的结果保存到数据库中
状态:当前值为单元格的原始字符串 默认提供两个前置解释器:默认前置解释器和EL表达式前置解析器
- 默认前置解释器:几乎什么事情都没有做
- EL表达式前置解析器:dorado的EL表达式,构造EL表达式上下文(变量:context、value和UUID),把参数当作EL表达式来解释,解释的结果作为值进行输出到下一个环节
状态:当前值为类型化以后的值,如果单元格对应的属性是整型,则当前值为整型类型 默认提供两个后知置解释器:默认后置解释器和EL表达式后置解析器
- 默认后置解释器:将值赋值给实体类对象的对应属性
- EL表达式后置解析器:,构造EL表达式上下文(变量:context和value),把参数当作EL表达式来解释,解释的结果作为值赋值给实体类对象的对应属性 ##数据映射 用单元格前置解释器的输出结果作为键,取数据映射规则里面的值。
如果主键是字符串类型,自动初始化为UUID,如果配置了主键的映射规则,前面的初始化,会被后面的覆盖。
上下文中包含冲前台传入的参数、当前单元格的信息,如:当前单元格处于多少行多少列。另外,还包含了单元格所在行的所有单元格信息。集体可以参考类Context
- 有一个创建时间属性,需要设置为导入数据的时间,我们可以选择EL表达式前置解析器,参数设置为${util.getToday()}
- 如果需要将某个属性设置成UUID,我们可以选择EL表达式前置解析器,参数设置为${UUID}
使用dorado的UploadAction控件,fileResolver设置为importer.excelUploadFileProcessor#upload,parameter参数配置为:
{
importerSolutionId: "xxx", //导入方案编码
startRow: 1 //可选参数,不传,默认从第二行开始导入(第一行往往是标题),0表示第一行,1表示第二行......
..... //后面是自己要传的参数
}