ひさしぶりにDbUtilsを触る

今のプロジェクトで大体設計ができてきて、もうすぐ製造工程にはいります。
なんか完全に新規案件なのに5年くらい前に作られたと思われる超独自WEBフレームワーク使うことになってて、あまり楽しい開発とは言えません。
製造は自分を含めて協力会社2人でやるんですが、メンテはプロパーの人たちがすることになるので開発効率の良い今時のフレームワークよりも使用経験のあるものが良いみたいです。
DBアクセスはDbUtilsを使うことになりそうです。DbUtilsといえば以前も書いたんだけど色々問題があるわけで、さっそくそれらをカバーする最低限のユーティリティを書いてみたりしました。その途中でBeanListHandlerを見てみたんだけど、バージョン1.1からGenericListHandlerってのが導入されてて、複数行を処理するハンドラの実装はこれのサブクラスになっています。GenericListHandlerがhandleメソッドで結果をまわして、1行ごとにhandleRowってメソッドを呼び出します。サブクラスはこれをオーバーライドするわけですが、ここでBeanListHandlerはRowProcessorのtoBeanメソッドを呼び出すようになっています。
これはちょっと問題があって、1行ごとにtoBeanメソッドが呼ばれるわけだから、そのたびに以下の処理が行われます。

  • ClassからPropertyDescriptorを取得。
  • PropertyDescriptorとResultSetMetaDataのマッピング

つまり、結果が返ってきたタイミングで一回やればいい処理を、1行ごとにやっちゃってるわけですね。
1.0のころは、RowProcessorのtoBeanListってメソッドを呼び出してました。ここでは上記のような問題はありませんでした。
もちろん1.1の実装のほうが、きれいですっきりしてるのは間違いありません。でもなんかなー。結局、BeanListHandlerを拡張したりせず、ResultSetHandlerの実装を独自に作成することにしました。

DbUtilsは所詮はDBユーティリティ。ORマッピングツールではないので、あまり高度なことを期待するのは間違っているのかもしれません。便利そうなResultSetHandlerの実装などが、いくつか準備されていますが、所詮は参考程度に考えて、プロジェクトで使うものは独自で実装したほうがいいとおもいます。