• 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文件

  • 相关阅读:
    浏览器 显示一个对话框,对话框中包含一条文字信息,用来提示用户输入文字。window.prompt()
    JS字符串转换为JSON对象的四种方法
    js中 json对象与json字符串相互转换的几种方式 $.parseJSON(jsonStr)json字符串转换为json对象
    C#变量命名规则(命名规范)
    C#中AppDomain.CurrentDomain.BaseDirectory(获取程序的基目录)及各种路径获取方法
    C# 的 Path.GetFileName、Path.GetExtension、Path.GetDirectoryName千一网络 http://www.itpow.com/
    js计算两个时间相差天数,获取时间的毫秒数之差
    C#将DataTable转化为List<T>
    https://www.cnblogs.com/sizhizhiyue/p/4820973.html asp.net后台导出excel的方法一:使用response导出excel
    .NET调用AS/400上的程序(.NET CALL AS/400 PGM)
  • 原文地址:https://www.cnblogs.com/developerY/p/4565330.html
Copyright © 2020-2023  润新知