标签:
背景:
导入Excel数据到数据库成为目前项目中很常用的技术,整理以前的实现发现:在原来系统中的导入,没有实现方法复用,如果要实现某一处数据的导入,需要将原来的代码复制过去、修修改改,实现过程较为复杂,实现类似的功能需要对原来的代码重新梳理,结合业务修改代码。
为了让每次相同的功能都不需要重复的开发,我们需要实现一种能够得到复用的程序功能。
目的:
如图所示
我们需要将Excel中的数据记录插入到DB的表中,如何实现?
……
示意图1:
示意图2:实现方式
Excel与数据库之间加入了XML的映射,对应Excel数据与数据库表设计之间关系,XML配置文件书写示例如下:
1.总体结构
<Excel> <Sheet name="学生" table="Student" primaryKey="StudentId" pkType="guid"> < Column> < /Column> < Column> < /Column> < Column> < /Column> …… </Sheet> </Excel>
<Excel name="学生"> <!- name:Excel中Sheet的名称,不配置此属性,默认为“Sheet1”,table:对应DB中的数据表名称(使用EF生成表的话则为对应实体名),primaryKey:主键字段名,pkType:逐渐类型 -> <Sheet name="学生" table="TB_Student" primaryKey="StudentId" pkType="guid"> <!-- Column节点:name:Excel中对应列名(第一行),field:对应数据库中字段名,isNeccessary:是否必要(true/false) isVerifyRepeat=是否验证重复(true/false) --> <Column name="学号" field="SCode" isNecessary="true" isVerifyRepeat="true"> <DataType>string</DataType> <AvailableField isExistAvailableField="false" enableValue="true">Enable</AvailableField> </Column> <Column name="姓名" field="SName" isNecessary="true"> <DataType>string</DataType> <ForeignKey isExist="false"></ForeignKey> </Column> <Column name="性别" field="Sex" conversionValue="男-0;女-1"> <DataType>string</DataType> <ForeignKey isExist="false"></ForeignKey> </Column> <Column name="年龄" field="Age" isVerifyRepeat="false"> <DataType>int32</DataType> <ForeignKey isExist="false"></ForeignKey> </Column> <Column name="生日" field="BirthDate" isVerifyRepeat="false"> <DataType>datetime</DataType> <ForeignKey isExist="false"></ForeignKey> </Column> <!-- isForeignKey:是否外键(true/false) --> <Column name="年级" field="GradeGID" isVerifyRepeat="false" isForeignKey="true" isNecessary="false"> <DataType>GUID</DataType> <!-- 外键信息配置 --> <ForeignKey> <!-- 外键表 --> <TableName>TB_Grade</TableName> <!-- Excel中所显示的外键表信息字段 --> <FieldName>GradeName</FieldName> <!-- 外键表所对应的主键字段名 --> <PrimaryKey>GradeID</PrimaryKey> <!-- 外键表“是否有效”字段说明:isExistAvailableField-是否存在“是否有效”字段(true/false),Enable-是否可用字段名,enableValue-可用状态下的具体存储值 --> <AvailableField isExistAvailableField="false" enableValue="true">Enable</AvailableField> </ForeignKey> </Column> <!-- isM2N-是否对应存在与其他表的多对多关系,separator-Excel中具体数据之间所使用的分隔符 --> <Column name="职务" field="职务" isM2N="true" separator="," isNecessary="false" isActive="true" > <!--第三张表表名--> <ThirdTable>TBR_StudentJob</ThirdTable> <!--第三张表表名--> <ThirdTablePrimaryKey dataType="string">Id</ThirdTablePrimaryKey> <ThirdTableFirstPK dataType="string">StudentId</ThirdTableFirstPK> <ThirdTableSecondPK dataType="string">JobId</ThirdTableSecondPK> <!-- 第三张表其他列需要传递默认值 --> <ThirdColumns> <Column field="DefaultTest" isDefault="true" dataType="string" /> </ThirdColumns> <!-- 与目标表对应的关联表的配置 TB_Job-表名,isDefault-是否为默认值(”true”,调用方需传递Dictionary类型参数中包括对应ThirdTableSecondPK的默认值) --> <RelatedTable isDefault="true">TB_Job</RelatedTable> <!-- 第三张表中存有的目标表的主键 --> <RelatedKey>JobId</RelatedKey> <!-- 第三张表中存有的目标关联表的主键 --> <RelatedName>JobName</RelatedName> <!-- 与目标表对应的关联表是否存在“是否有效”字段的配置 --> <AvailableField isExistAvailableField="false" enableValue="true">Enable</AvailableField> </Column> <Column field="Default" isDefault="true"></Column> </Sheet> </Excel>
配置文件应该是在项目中经常用到的,而一般我们的使用都是在别人已经封装好,已经制定下规定格式要求的前提下,例如web项目下的web.xml的配置,以及一些较为常用的框架,更是需要我们在其规定下进行使用。反过来想,为何我们不能在一些通用的需求功能应用上使用XML作为配置,规范出我们的规则,让程序更加灵活和通用,这便是框架的逐渐形成的方式吧。
标签:
原文地址:http://blog.csdn.net/lfsfxytgb9_lyg/article/details/43267397