zoukankan      html  css  js  c++  java
  • java基于xml配置的通用excel单表数据导入组件(一、实际应用过程)

    主要应用技术:poi + betwixt + reflect

    一、实际应用过程

    1.创建与目标表结构一样,表名为‘{目标表名}_import’的临时表;

    2.创建用于存储导入问题数据的表:t_import_error (只需创建一张);

    Name Code Data Type Length Precision Mandatory Primary Identifier Displayed Domain
    问题id op_id VA36 36  TRUE TRUE TRUE <None>
    问题表名 op_name VA50 50  TRUE FALSE TRUE <None>
    所在行号 row_no I   TRUE FALSE TRUE <None>
    问题说明 memo TXT   TRUE FALSE TRUE <None>
    创建人id create_id VA36 36  TRUE FALSE TRUE <None>
    创建人名 create_name VA50 50  TRUE FALSE TRUE <None>
    创建时间 create_time VA17 17  TRUE FALSE TRUE <None>
    View Code

    3.创建WEB-INF/excel/{目标表名}_import.xml 配置文件

    <?xml version="1.0" encoding="GBK"?>
    <importExcel>
     <name>台帐明细导入</name>
     <!--initSQL 对excel数据进行库表操作之前执行的初始化语句,多条语句用";"分隔  , ${userId} 标识当前登录用户id, 本语句为清除上次导入发现的问题数据-->
     <initSQL>delete from t_import_error where create_id='${userId}'</initSQL>
     <!--beforeSaveSQL  excel数据由_import临时表转入正式表之前执行的语句,多条语句用";"分隔,${userId} 标识当前登录用户id,可执行删除重复数据等-->
     <beforeSaveSQL>delete from t_account_detail</beforeSaveSQL>
     <!--afterSaveSQL  excel数据由_import临时表转入正式表之后执行的语句,多条语句用";"分隔,${userId} 标识当前登录用户id-->
     <afterSaveSQL>delete from t_account_detail_import where create_id='${userId}'</afterSaveSQL>
     <!-- excelColumn  excel显式列名定义  -->
     <excelColumn>  
       <entry>  
         <!-- key excel列名  -->
      <key>事项名称</key>  
      <value>  
        <!--column 数据库字段名-->
        <column>op_name</column>  
        <!--dataType 数据类型 目前支持 varchar、int、float 三种类型-->
        <dataType>varchar</dataType>  
        <!--length 数据库字段长度, 0表示不限制-->
        <length>255</length>  
        <!--required 是否必填 true、false -->
        <required>true</required>
        <!--transfer 是否进行数据内容转换 true(需配置<className>、<method>、<param>节点)、false -->
        <transfer>false</transfer>
      </value>  
       </entry>
       <entry>  
      <key>台帐分类</key>  
      <value>  
        <column>type_id</column>  
        <dataType>varchar</dataType>  
        <length>100</length>  
        <required>true</required>
        <transfer>true</transfer>
        <!--className 负责数据转换的类-->
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <!--method 负责数据转换的方法名, 如果要设置字段默认值统一使用 getConst方法并由param设置默认值-->
        <method>getAccoutTypeIdByName</method>
        <!--param 负责数据转换的方法对应的参数,
              多个参数用","分隔  如<param>${self},varchar:nodeId,int:3,float:15.2</param>,${self}表示读取自身excel表格内容-->
        <param>${self}</param>
      </value>
       </entry>
       <entry>  
      <key>开始日期</key>  
      <value>  
        <column>begin_date</column>  
        <dataType>date</dataType>  
        <length>8</length>  
        <required>true</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>filterDate</method>
        <param>${self}</param>
      </value>
       </entry>
       <entry>
      <key>结束日期</key>  
      <value>  
        <column>end_date</column>  
        <dataType>date</dataType>  
        <length>8</length>  
        <required>true</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>filterDate</method>
        <param>${self}</param>
      </value>
       </entry>
       <entry>
      <key>数据值</key>  
      <value>  
        <column>detail_value</column>  
        <dataType>float</dataType>  
        <length>15</length>  
        <required>true</required>
        <transfer>false</transfer>
      </value>
       </entry>
       <entry>
      <key>描述</key>  
      <value>  
        <column>describe</column>  
        <dataType>varchar</dataType> 
        <length>0</length>  
        <required>false</required>
        <transfer>false</transfer>
      </value>
       </entry>
     </excelColumn>
        <!-- systemColumn  系统隐式列名定义  -->
     <systemColumn>
       <entry>
      <key>台帐id</key>  
      <value>  
        <column>op_id</column>  
        <dataType>varchar</dataType>  
        <length>36</length>  
        <required>true</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>getUUID</method>
        <param></param>
      </value>
       </entry>
       <entry>
      <key>创建人id</key>  
      <value>  
        <column>create_id</column>  
        <dataType>varchar</dataType>  
        <length>36</length>  
        <required>true</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>getUserId</method>
        <param></param>
      </value>
       </entry>
       <entry>
      <key>创建人名</key>  
      <value>  
        <column>create_name</column>  
        <dataType>varchar</dataType>  
        <length>50</length>  
        <required>true</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>getUserName</method>
        <param></param>
      </value>
       </entry>
       <entry>
      <key>创建时间</key>  
      <value>  
        <column>create_time</column>  
        <dataType>varchar</dataType>  
        <length>17</length>  
        <required>true</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>getNowInput</method>
        <param></param>
      </value>
       </entry>
       <entry>
      <key>修改人id</key>  
      <value>  
        <column>modify_id</column>  
        <dataType>varchar</dataType>  
        <length>36</length>  
        <required>false</required>
        <transfer>true</transfer>
        <className>com.egeniuss.jxibs.manage.importexcel.Transfer</className>
        <method>getConst</method>
        <param>varchar:admin</param>
      </value>
       </entry>
     </systemColumn>
    </importExcel>
    View Code

    4.页面传参即可使用

    <input type="hidden" name="tableTarget" value="t_account_detail"/>

    <input type="file" name="excel"/>

  • 相关阅读:
    LeetCode Fraction to Recurring Decimal
    LeetCode Excel Sheet Column Title
    LeetCode Majority Element
    LeetCode Reverse Nodes in k-Group
    LeetCode Recover Binary Search Tree
    一天一个设计模式(10)——装饰器模式
    一天一个设计模式(9)——组合模式
    一天一个设计模式(8)——过滤器模式
    一天一个设计模式(7)——桥接模式
    一天一个设计模式(6)——适配器模式
  • 原文地址:https://www.cnblogs.com/101key/p/3286475.html
Copyright © 2011-2022 走看看