欢迎使用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. String、Stringbuffer、Stringbuilder三者之间的区别

    1.首先说运行速度,速度由快到慢排列:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuil ...

  2. bzoj 2440 完全平方数 【莫比乌斯函数】

    题目 题意:第Ki 个不是完全平方数的正整数倍的数. 对于一个数t,t以内的数里的非完全平方数倍数的个数:num=1的倍数的数量−一个质数平方数(9,25,49...)的倍数的数量+两个质数的积平方数 ...

  3. hdu 4970 trick

    http://acm.hdu.edu.cn/showproblem.php?pid=4970 有n个格子在一条线标号1-n上,可以给范围在l到r内的格子架上攻击力为d的攻击塔,有m个怪物,每个怪物有个 ...

  4. Scala_继承

    继承 Scala与Java在继承方面的区别 Scala中的继承与Java有着显著的不同: 重写一个非抽象方法必须使用override修饰符 只有主构造器可以调用超类的主构造器 在子类中重写超类的抽象方 ...

  5. [ X.XX]CF每日一题系列线下更新中

    现在做的都好水啊,就不写博客了,线下有记录滴

  6. hive函数 get_json_object的使用

    hive提供了json的解析函数:get_json_object 使用方法 对于jsonArray(json数组),如person表的xjson字段有数据: [{"name":&q ...

  7. Python自动化开发 - 网络编程

    本节内容 1.客户端/服务器架构 2.OSI七层 3.socket层 4.socket是什么 5.套接字发展史及分类 6.套接字工作流程 一.客户端/服务器架构 即Client/Server架构,包括 ...

  8. Python自动化开发 - 常用模块(二)

    本节内容 1.shutil模块 2.shelve模块 3.xml处理模块 4.configparser模块 5.hashlib模块 6.subprocess模块 7.re模块 一.shutil模块 高 ...

  9. unigui如何连接数据库

    unigui如何连接数据库 UNIGUI既可以二层直连数据库,也可以通过中间件连接数据库. 这里只介绍UNIGUI二层直连数据库. 数据库连接控件.数据集控件都要拖放在MainModule窗体上.UN ...

  10. ASP.Net MVC OA项目笔记<四>

    1.1.1 EF线程唯一 在数据层中用到了EF的实例,在数据会话层也用到了,所以在一个请求中只能创建一个EF实例(线程内唯一对象),把它封装成工厂类 1.1.2 为了防止相互引用,循环引用,所以这个工 ...