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