主要应用技术: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>

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>

4.页面传参即可使用

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

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

java基于xml配置的通用excel单表数据导入组件(一、实际应用过程)的更多相关文章

  1. java基于xml配置的通用excel单表数据导入组件(四、DAO主处理类)

    package XXXXX.manage.importexcel; import java.beans.IntrospectionException; import java.io.BufferedR ...

  2. java基于xml配置的通用excel单表数据导入组件(二、xml配置文件解析加载)

    1.BN_ImportExcel.java 对应xml主节点属性 package XXXXX.manage.importexcel; import java.io.Serializable; impo ...

  3. java基于xml配置的通用excel单表数据导入组件(五、Action处理类)

    package xxxxxx.manage.importexcel; import java.io.File; import java.util.HashMap; import java.util.M ...

  4. java基于xml配置的通用excel单表数据导入组件(三、负责数据转换处理的类)

    package xxxxxxx.manage.importexcel; import java.util.Map; import java.util.logging.Logger; import xx ...

  5. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  6. Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)

    1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序.Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持.Spr ...

  7. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  8. 【Spring Framework】Spring入门教程(二)基于xml配置对象容器

    基于xml配置对象容器--xml 标签说明 alias标签 作用:为已配置的bean设置别名 --applicationContext.xml配置文件 <?xml version="1 ...

  9. struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)

    第01步:导包 第02步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...

随机推荐

  1. C#学习笔记(4)

    今天先把上几个系列的做一个总结,在这里给出一个面向对象版的简易计算器(重在理解面向对象的思想). 1.首先定义一个计算器类(类库)(Calculator) public abstract class ...

  2. IOS动态修改按钮响应时间

    在项目开发中我们可能会遇到这样子的情况,比如在我们登陆的时候需要把数据发送给服务器进行比对,通常我们的做法是当用户点击按钮后,使用一个加载效果的view遮挡住当前界面,直到服务器返回数据或者超时.如果 ...

  3. iOS 多张图片保存到相册问题(add multiple images to photo album)

    不知道朋友们有木有做过多图保存到系统的相册这个需求,我在用`UIImageWriteToSavedPhotosAlbum`保存图片时候,在代理回调方`didFinishSavingWithError` ...

  4. 24种设计模式--责任链模式【Chain ofResponsibility Pattern】

    中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女 ...

  5. MongoDB3.2版本与3.0版本写场景压力测试对比

    我们主要是为了测试journal对写操作性能的影响.分别测试了3.2版本,3.0版本在ramdisk,hdd上有journal,和没journal的情况. 发现一个很怪异的现象,3.2版本时候,随着y ...

  6. ubuntu 在XP下硬盘安装

    以下选择在XP下用 grub4dos 安装 ubuntu 12.04版本 需要下载两个文件:一个是grub4dos,另一个是 ubutuntu 镜像文件 grub4dos下载地址:http://dow ...

  7. winform模拟鼠标按键

    今天朋友说被他们公司的学习网站恶心到了,下班后要他看学习资料,看完点下一页,而且一页必须停留多少时间才能点击下一页,想不看都不行,于是晚上我突发奇想要给他做一个模拟鼠标按键的程序,可以让鼠标定时间隔触 ...

  8. PL/SQL学习(四)存储过程和函数

    原文参考:http://plsql-tutorial.com/ PL/SQL存储过程 存储过程相当于一个有名字的PL/SQL块,经过第一次编译后再次调用时不需要再次编译 创建格式: CREATE [O ...

  9. Android 自定义View实现单击和双击事件

    自定义View, 1. 自定义一个Runnable线程TouchEventCountThread ,  用来统计500ms内的点击次数 2. 在MyView中的 onTouchEvent 中调用 上面 ...

  10. postgres 约束 多个条件 联合 约束

    ADD CONSTRAINT xxx CHECK ( (col1 = 0.0) = (col2 IS NOT NULL)); ## 相当于check (true = ture)