My favorites | Sign in
Project Home Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Project Information
Members
Links

This Project Has Moved

https://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が用意されています。

CsvDaoBaseCsvEntity実装クラスと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


Powered by Google Project Hosting