欢迎使用Excelbatis!

github地址:https://github.com/log4leo/Excelbatis

Excelbatis的优点

  • 和spring天然结合,易于接入
  • xsd支持,使得配置更加简洁,不需要按照bean冗长的语法进行配置
  • 遵循“约定大于配置”原则,如果不配置的话,自动推断字段类型( ORM框架基本都提供的功能 )
  • 通过实现Convertor和Transfer接口提供一定的扩展性,你可以自定义excel数据到你字段类型的转换,比如你可以通过定义一个MapConvertor来把excel文件中的数据转换成Map类型的字段。( 详细请参见Convertor章节 )
  • 从excel读出到对象、从对象列表读入excel文件两者配置可以复用,通过字段scope来区分某个字段是用于读入还是写出。

原理

  1. 读写excel文件 采用apache poi来读写excel文件,poi的依赖是 org.apache.poi poi 3.9
  2. 字段的映射写入、读出 你需要为每列都配置对应的表头名、字段名,这样框架读excel文件时会根据这个配置找到对应的字段,并通过Java反射找到对应的get和set方法,因此这个地方需要你的实体类遵循JavaBean规范。同时你需要配置readEntityType和writeEntityType属性,框架根据这个来决定生成和写入什么对象,writeEntityType是可选的,如果不配置的话,默认与readEntityType相同,这也是“约定大于配置”的一种体现形势,因为很多时候我们读入和写出的是同一种类型。
  3. 数据内容和类型的转换 读入excel单元格时,我们读入的是文本类型,需要换成对应的字段数据(比如int、long、map等),这里我们提供了ExcelDataTransfer和ExcelDataConvertor两个接口来让你定制化这个过程,通过实现ExcelDataTransfer接口的doTransfer方法,你可以先把单元格内容转换成正确的内容,比如单元格里你填的是某项编码code,你需要一次远程调用查询对应的名称。通过实现ExcelDataConvertor的doConvert方法,你可以把字符串类型String转换成字段类型,比如long,之所以分成Transfer和Convertor是为了提高这两个模块的复用程度。 当然,如果每种类型都需要指定Transfer和Convertor会很麻烦,因此这里提供了两个特性:
  4. 通过配置builtInConvertor来指定一些常用的convertor
  5. 自动根据字段类型推断convertor 方便使用的同时也提供了一定的扩展性。

配置使用

下面是一段简单的示例配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:excelbatis="http://www.taobao.com/excelbatis/orm"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.taobao.com/excelbatis/orm http://www.taobao.com/excelbatis/orm.xsd"
default-autowire="byName">
<excelbatis:processor id="processor" readEntityType="com.excel.orm.demo.PersonInfo">
<excelbatis:columnAttrs>
<excelbatis:columnAttr columnName="name" columnField="name"/>
<excelbatis:columnAttr columnName="age" columnField="age"/>
<excelbatis:columnAttr columnName="birthday" columnField="birthday" builtInConvertor="dateConvertor"/>
</excelbatis:columnAttrs>
</excelbatis:processor>
</beans>

下面分成几步来说:

  • 配置excelbatis的命名空间和xsd的位置
       xmlns:excelbatis="http://www.taobao.com/excelbatis/orm"
http://www.taobao.com/excelbatis/orm http://www.taobao.com/excelbatis/orm.xsd
  • 定义一个processor,这里需要配置id,这个id也是你其他地方依赖这个bean的id
  • 定义readEntityType和writeEntityType,前者是必须的,后者是可选的,默认与readEntityType相同
<excelbatis:processor id="processor" readEntityType="com.excel.orm.demo.PersonInfo">
  • 配置每一列:

    • 列名columnName,与excel文件表头相同
    • 列字段columnField,对应实体的字段
    • transfer,作为一个扩展点,如果你自定义Transfer的话,需要实现com.excel.orm.transfer.ExcelDataTransfer接口,框架在解析excel单元格内容后,会先调用这个transfer的doTransfer方法来转换数据内容。
    • convertor,作为一个扩展点,如果你自定义Convertor的话,需要实现com.excel.orm.convertor.ExcelDataConvertor接口,框架在执行完transfer后会先调用convertor的doConvert方法来转换数据成字段的类型再调用set方法注入数据到实体中。
    • builtInConvertor,框架内默认的convertor实现,目前只有以下几种:
      • intConvertor
      • longConvertor
      • mapConvertor
      • listConvertor
      • dateConvertor
      • boolConvertor
  • 依赖你前面定义的processor的bean然后调用com.excel.orm.processor.ExcelBatisProcessor#parse方法来解析excel文件到实体List,调用com.excel.orm.processor.ExcelBatisProcessor#write方法将实体列表写入excel文件

Excelbatis-一个将excel文件读入成实体列表、将实体列表解析成excel文件的ORM框架,简洁易于配置、可扩展性好的更多相关文章

  1. Dreamer2.1 发布 新增将Bean解析成xml和json

    一个上午,增加两个功能 1.直接将对象解析成XML 2.将对象解析成JSON 对象可以是数组,可以是集合,也可以是单个对象 源码和jar下载地址:http://pan.baidu.com/share/ ...

  2. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  3. python 将excel转换成字典,并且将字典写到txt文件里

    # -*- coding: utf-8 -*- #python2.7 import sys reload(sys) sys.setdefaultencoding('utf-8') from pyexc ...

  4. 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

    1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...

  5. java解析导入excel表格转为实体类javabean,根据实体类中的中文名称

    最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...

  6. WebApi系列~FromUri参数自动解析成实体的要求

    回到目录 关于webapi我之前写了一些文章,大家可以根据目录去浏览,今天要说的是个怪问题,也是被我忽略的一个问题,当你的Url参数需要被Api自动解析成实体的属性,实事上是要有条件的,不是所以属性都 ...

  7. js 解析本地Excel文件!

    通常,一般读取Excel都是由后台来处理,不过如果需求要前台来处理,也是可以的.. 1.需要用到js-xlsx,下载地址:js-xlsx 2.demo: <!DOCTYPE html>&l ...

  8. IntelliJ IDEA 通过GsonFormat插件将JSONObject格式的String 解析成实体

    GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...

  9. 如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件

    这篇薄荷主要是讲了如何用tensorflow去训练好一个模型,然后生成相应的pb文件.最后会将如何重新加载这个pb文件. 首先先放出PO主的github: https://github.com/ppp ...

随机推荐

  1. Java读取修改Properties文件

    properties文件是我们经常需要操作一种文件,它使用一种键值对的形式来保存属性集. 无论在学习上还是工作上经常需要读取,修改,删除properties文件里面的属性. 本文通过操作一个prope ...

  2. My first paper is now available online

    A two-grid discretization scheme of non-conforming finite elements for transmission eigenvalues

  3. centos下网口vlan设置

    如果要使vlan之间进行通信,我们通常会使用三层交换机或者路由器子接口模式来做.Linux上关于VLAN与Cisco交换机中继连接,也是可以实现其互相之间的通信的. 环境:RHEL 5.2 最小化安装 ...

  4. sqlserver 自动创建作业执行备份数据库

    declare @name varchar(250)set @name='I:\dydb_n\dydb_n'+convert(varchar(50),getdate(),112)+ left(righ ...

  5. C#调用haskell遭遇Attempted to read or write protected memory

    1. Haskell的代码如下: 上面的代码中readMarkdown与writeHtmlString是pandoc中的函数,newString的作用是将String转换为IO CString. 2. ...

  6. 【转】IE浏览器CSS BUG集锦

    Internet Explorer CSS Bugs Overview Internet Explorer is famous for not supporting many of CSS prope ...

  7. .NET MVC 学习笔记(二)— Bootstrap框架

    二..NET MVC 学习笔记(一)—— Bootstrap框架 在实际开发过程中,页面的样式问题是让人很头疼的问题,良好的用户界面可以大大提高用户体检,而在你没有前端开发人员的火力支援情况下,并不是 ...

  8. Palindrome II

    Problem Statement Given a string s, partition s such that every substring of the partition is a pali ...

  9. ReactNatvie遇到的错误

    1:新版的React包中没有包含PropTypes,如果使用需要从‘prop-types’包中导入. 2: 'prop-types'包中直接定义‘PropTypes.style’是无效的,需要使用‘P ...

  10. [vue] [axios] 设置代理实现跨域时的纠错

    # 第一次做前端工程 # 记一个今天犯傻调查的问题 -------------------------------------------------------------------------- ...