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 方便使用的同時也提供了必定的擴展性。

配置使用

下面是一段簡單的示例配置git

<?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>

下面分紅幾步來講:github

  • 配置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">
  • 配置每一列:spring

    • 列名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文件apache

相關文章
相關標籤/搜索