我需要使用 Java 和 Hibernate 将值由管道 ( | ) 分隔的文本文件导入到数据库中。文本文件在别处生成,并具有以下布局:
示例文件.txt
|0150|A|B|C|
|0150|X|Y|Z|
|0190|1|2|
|0200|9|8|7|H|F|E|
- 每行对应一个记录。
- 第一个值(即 0150、0190、0200)是它保存的信息类型(应该存储到哪个表中)。
- 其余的是要存储在该表中的值。
到目前为止,我已经能够阅读这些行,找到记录对应的对象 - 使用工厂模式 - 将值分成 String[] 数组并调用方法 createInstance(String[] fields) 来创建对象并将其存储到数据库中 - 使用模板模式:
导入服务接口
public interface ImportServiceInterface {
public void createInstance(String[] fields);
}
抽象导入服务
public abstract class AbstractImportService implements ImportServiceInterface {
public static ImportServiceInterface getImportService(String line) {
// returns the correct subclass
}
public void import() {
createInstance(splitFields());
}
public String[] splitFields(String line) {
// splits the line
}
}
所以我有 3 个独立的服务,每个服务都实现自己的 createInstance(String[] fields) 版本:
ImportExampleTypeService
public ImportExampleTypeService implements AbstractImportService {
public void createInstance(String[] fields) {
ExampleModel myExample = new myExampleModel(); // mapped with Hibernate
// find which object members corresponds to the fields
// call the DAO to store the object
}
}
我的问题是用户将能够指定他自己的布局:值对应的字段、大小和位置。
我考虑过创建一个表来存储布局,然后使用反射匹配属性的名称。
但我一定错过了一些东西,也许有更简单的方法可以做到这一点?