|
Project Information
Links
|
This Project Has Movedhttps://github.com/umjammer/klab-commons-csv CSV を扱うアノテーションライブラリエンティティに@CsvEntityを設定し、エンティティーのフィールドにも@CsvColumnを設定し CSV のカラムを定義します。エンティティはジェネリックなCsvDaoから利用することができます。SpringFramework 等でサービスに注入すれば persistence DAO と同等に使用することが可能になります。制限は、まだ JPA ほどの行操作 API はありません。CsvDao#findAll() 全取得、 CsvDao#updateAll(Collection) 全書き出しのみです。 SpringFramework を使用した例基本設定spring-beans.xml に <bean id="csvDaoBase"
class="org.klab.commons.csv.dao.CsvDaoBase"
abstract="true">
</bean>と設定します。 使用する側CSV をデータソースとして使用するためのラッパCsvFactoryの実装を作成します。基本実装としてリソースを扱うResourceCsvFactoryとファイルを扱うFileCsvFactory、 ストリームを扱うIOStreamCsvFactoryが用意されています。 CsvDaoBaseにCsvEntity実装クラスとCsvFactoryの実装を設定した物をfooCsvDaoと定義します。 POJO annotation @CsvEntity
Foo implements org.klab.commons.csv.dao.CsvEntity {
@CsvColumn(sequence = 0)
@GeneratedValue // 読み込み時に自動的に id を振る場合
Integer id;
@CsvColumn(sequence = 1)
String column1;
@CsvColumn(sequence = 2)
int column2;
@CsvColumn(sequence = 3)
@Enumerated // JPA の Enumerated と同じ仕様
EnumType column3;
@CsvColumn(sequence = 4)
@Dialectal // ユーザが定義したクラスや、可変長のカラムを扱う場合とか
UserType notCsvColumn;
}spring-beans.xml <bean id="fooCsvDao"
parent="csvDaoBase">
<property name="entityClass"
value="your.package.foo.impl.FooImpl" />
<property name="csvFactory"
ref="csvFactory" />
</bean>
<bean id="csvFactory"
class="org.klab.commons.csv.impl.FileCsvFactory">
<property name="fileName"
value="/sample/sample.csv" />
</bean>あとは fooCsvDao をサービスに注入すれば persistence DAO と ほぼ同様に使用することが可能になります。 class FooServiceImpl extends FooService {
CsvDao<Foo, Integer> csvDao;
public void setFooCsvDao(CsvDao<Foo, Integer> csvDao) {
this.csvDao = csvDao;
}
public List<Foo> findAll() {
// CSV 取ってくるだけならたった1行!
return csvDao.findAll();
}
}普通に使用した例 CsvDaoBase<Foo, Integer> csvDao = new CsvDaoBase<Foo, Integer>();
csvDao.setEntityClass(FooImpl.class);
FileCsvFactory csvFactory = new FileCsvFactory();
csvFactory.setFileName("/sample/sample.csv");
csvDao.setCsvFactory(csvFactory);
List<Foo> result = csvDao.findAll();Android CsvDaoBase<Foo, Integer> csvDao = new CsvDaoBase<Foo, Integer>();
csvDao.setEntityClass(FooImpl.class);
IOStreamCsvFactory csvFactory = new IOStreamCsvFactory();
Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.bar);
csvFactory.setInputStream(getContentResolver().openInputStream(uri));
csvDao.setCsvFactory(csvFactory);
List<Foo> result = csvDao.findAll();Depends
|