[Seasar-user:15806] Re: s2daoで戻り値のMapのKEYにアンダースコアを残すには

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2008年 9月 22日 (月) 10:29:13 JST


中村(taedium)です。

> S2Daoのselectメソッドの戻り値をMapにした場合、
> MapのKEYからアンダースコアが取り除かれていますが、
> これを残す方法はありますでしょうか。

S2Daoで対応するには、アンダースコアを除去しないクラスを独自に
用意してもらう必要があります。

以下に、方法を説明します。


まず、Mapを扱う次の3つのクラスを拡張するなどして
アンダースコアを除去しないクラスを作成します。
(アンダースコアの除去はこれらの共通の親クラスで行われています)
・org.seasar.dao.impl.MapListResultSetHandler
・org.seasar.dao.impl.MapResultSetHandler
・org.seasar.dao.impl.MapArrayResultSetHandler

次に、S2DaoのTigerResultSetHandlerFactoryImplを拡張したクラスを作り、
ファクトリメソッドで上記で作成したクラスのインスタンスを返すようにします。

  public class MyResultSetHandlerFactory 
    extends TigerResultSetHandlerFactoryImpl {

    @Override
    protected ResultSetHandler createMapListResultSetHandler() {
      // org.seasar.dao.impl.MapListResultSetHandlerを
      // 拡張したクラスのインスタンスを返す
      return new MyMapListResultSetHandler();
    }

    @Override
    protected ResultSetHandler createMapResultSetHandler() {
      // org.seasar.dao.impl.MapResultSetHandlerを
      // 拡張したクラスのインスタンス
      return new MyMapResultSetHandler();
    }

    @Override
    protected ResultSetHandler createMapArrayResultSetHandler() {
      // org.seasar.dao.impl.MapArrayResultSetHandlerを
      // 拡張したクラスのインスタンスを返す
      return new MyMapArrayResultSetHandler();
    }
  }

最後に、dao.diconにて、
org.seasar.dao.impl.ResultSetHandlerFactorySelector
の替わりにTigerResultSetHandlerFactoryImplの拡張クラス
(上の例で言えばMyResultSetHandlerFactory)を登録します。

dao.diconの設定方法は以下のドキュメントが参考になります。
http://s2dao.seasar.org/ja/daoDicon.html#configurationChange


-- 
Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>



Seasar-user メーリングリストの案内