JavaETL—通过映射将CSV文件映射到POJO,以便Hibernate加载

JavaETL—通过映射将CSV文件映射到POJO,以便Hibernate加载,java,csv,mapping,etl,Java,Csv,Mapping,Etl,我有两个不同的csv文件,其中包含需要导入到表中的数据 两个csv文件都具有映射到同一对象的字段,但具有不同的列名和列顺序。我希望找到一种简单的方法来进行映射,然后使用hibernate来处理对db的写入 是否有标准/简单的方法来进行这些映射 我想我可以创建一些hashmap来跟踪列和值,这样列可以按任何顺序排列,但我很好奇是否有更简单(或更标准)的方法。我在我的谷歌中没有找到任何东西。获取并使用@Parsed注释为您的pojo添加注释,并指定列名 public class MyPojo {

我有两个不同的csv文件,其中包含需要导入到表中的数据

两个csv文件都具有映射到同一对象的字段,但具有不同的列名和列顺序。我希望找到一种简单的方法来进行映射,然后使用hibernate来处理对db的写入

是否有标准/简单的方法来进行这些映射

我想我可以创建一些hashmap来跟踪列和值,这样列可以按任何顺序排列,但我很好奇是否有更简单(或更标准)的方法。我在我的谷歌中没有找到任何东西。

获取并使用
@Parsed
注释为您的pojo添加注释,并指定列名

public class MyPojo {

    @Trim
    @LowerCase
    @Parsed // column name will be derived from input CSV
    private String text;


    @Parsed(field = "purchase amount") //here you define the column name explictly
    private BigDecimal amount;

    public BigDecimal getAmount(){
        return amount;    
    }
}
然后,扩展此类并使用注释提供另一个字段名:

public class AnotherPojo extends MyPojo {

    @Parsed(field = "some amount")
    private BigDecimal amount;

    @Override
    public BigDecimal getAmount(){
        return amount;    
    }
}
使用类型为
BeanListProcessor
的行处理器解析文件,然后使用类型为
BeanListProcessor
(查看教程)。代码应该是这样的(我没有测试这个,但是你应该知道):

公共列表parsebean(类beanType,文件inputFile){
BeanListProcessor rowProcessor=新的BeanListProcessor(beanType);
CsvParserSettings parserSettings=新的CsvParserSettings();
setRowProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(true);//将从输入文件获取标题
CsvParser parser=新的CsvParser(parserSettings);
//这将读取您的文件并将所有行提交给上面定义的行处理器
parser.parse(新文件读取器(inputFile));
List bean=rowProcessor.getBeans();
返豆;
}
由于所有对象都位于
MyPojo
的层次结构中,因此您可以轻松地保存从每个文件提取的数据

披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)

public <T> List<T> parseBeans(Class<T> beanType, File inputFile){
    BeanListProcessor<T> rowProcessor = new BeanListProcessor<T>(beanType);
    CsvParserSettings parserSettings = new CsvParserSettings();
    parserSettings.setRowProcessor(rowProcessor);

    parserSettings.setHeaderExtractionEnabled(true); //will get headers from the input file
    CsvParser parser = new CsvParser(parserSettings);

    //this will read your file and submit all rows to the row processor defined above
    parser.parse(new FileReader(inputFile));
    List<T> beans = rowProcessor.getBeans();
    return beans;
}