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

欢迎使用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文件
时间: 2024-10-30 07:17:55

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

file_get_contents() — 将整个文件读入一个字符串

file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法.如果操作系统支持还会使用内存映射技术来增强性能. 说明 string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] ) 和 file() 一样,只除了 file_get_contents()

自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 更有开发效率地使用CSV文件 为了更有效率地使用CSV文件,我制作了一个工具:Code代码生成器. 这个工具可以对CSV文件进行简单地配置,自动生成这个CSV文件对应的C++数据结构和字段类型解析函数代码. 工程项目只要加入这些自动生成的代码,就可以更方便地使用来自CSV配置文件的数据. 用工具自动生代码,可以省去了手工编写.手工维护那些大量的.无聊繁琐的类型定义.数据转换的代码的过

案例解析:pdf文件怎么转换成word

在一些的文本格式转换中,最多的还是PDF文件转换成Word.对此,网上给了我们很多的方法,在不断的学习和摸索中,我们也渐渐知道了哪一种方法好用,哪一种方法不适合我们使用.从听说到了解,从了解到熟知,从熟知到经验,这是一个很长的过程,现在刚刚步入社会的新人,就像今天莘莘学子走入考场一样,带着紧张激动的情绪,不知考题上会有什么内容.这里小猪猪为这些还没有经验的人讲解一下PDF文件怎么转换成Word? 我们知道对于PDF转换成Word文档有很多的说法,可是到如今仍是各说各话,都是自己的好.用户如果不清

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

1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作. 关于这个插件,我在早期随笔<Bootstrap文件上传插件File Input的使用>也做了一次介绍,这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x

序列化和反序列化:将本地文件中的数据反序列化成实体对象

(1)将本地文件中的数据反序列化成实体对象 (2)将实体对象序列化 .txt中json格式的数据为:{"Name":"张三","Age":20,"Address":"上海市徐汇区"} 第一步: 添加dll引用:Newtonsoft.Json.dll (网上下载一个) using Newtonsoft.Json; 第二步: 新建一个Student实体类: public class Student { publ

excel表格 按行数 或者其他文字拆分为多个文件

说明: 此方法用于将大的excel根据某一列里面的内容,拆分为多个子文件.我的需求是 将文件里面的记录每100条拆分为1个文件.因此需要手动添加分类列. 1 手动添加分类列 需要用到函数  =ROUNDUP(ROW(A1)/100,0)  ,在(A1,2)里面写如公式,表示没100行变一下序号. 2 分类列完成之后 .保存,按alt + f11键打开VBE窗口 3 选择插入->模块粘贴下面代码到编辑器中 代码: Sub 保留表头拆分数据为若干新工作簿() Dim arr, d As Object

C一次将整个文件读入内存

最近工作,有个需求需要将YUV的整个文件读入内存,然后处理这些YUV数据,一种比较有效的方法如下: #include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; long lSize; char * buffer; size_t result; /* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */ pFile = fopen ("test.txt", "rb&qu

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

回到目录 关于webapi我之前写了一些文章,大家可以根据目录去浏览,今天要说的是个怪问题,也是被我忽略的一个问题,当你的Url参数需要被Api自动解析成实体的属性,实事上是要有条件的,不是所以属性都可以被自动赋值的,下面我们就来看看先决条件: 条件一:类属性名称必须和参数名称相同 条件二:API参数必须以[FromUri]来修饰 条件三:属性类型为“类”的,如果使用类名(导航属性在本类的名称,可以不是类的原名).属性名的形式,例如Page.PageIndex 条件四:属性类型为“数组,集合”时

【python】解析Excel中使用xlrd库、xlwt库操作,读取Excel文件详解(一)

上文提供了Excel文件读写操作的基本模板,本文进一步详解这两个模块的功能. 一.Book(class) 由xlrd.open_work("example.xls")返回 nsheets: sheets数 sheet_names: sheet名称列表 sheets: sheet列表 sheet_by_index(sheetx): 按序号提取sheet sheet_by_name(sheet_name): 按名称提取sheet 二.Sheet(class) 由Book object相关方