■ Java JDBC SQLをどこに記述するか?
・実行するSQLをどのように記述したり生成したりするか?いくつかのパターンがある。
1.プログラム中に固定的に記述する。
2.プログラム中でロジックに応じて動的に生成する。
3.Entityのアノテーションから生成する。
4.事前あるいは実行時に取得したテーブルのメタデータから生成する。
5.外部ファイルに記述する。
・他にもあるかも知れないが、私が思いつくのはこのくらい。個人的には4.や5.がよいと考えるが、得失を検討してみよう。
・1.は、SQLがいろいろなソースファイルにバラバラに記述されることになり、どこにSQLがあるのか分からなくなってしまう。「きちんとクラス分けをすればよいだろう」という主張もあるだろうが、それでもわかりにくい。パフォーマンスチューニングなどで、SQLのプロがSQLをチェックするような時にも不便である。
・2.は1.と同様だが、特に条件部分をロジックで生成するような場合。画面から入力された値に応じてwhere条件を付加するような場合である。状況によっては仕方ないともいえるが、1.と同じ理由でできれば避けたい。また最近のORMには、メソッドチェーンで次々とSQLを生成する機能がある。これを推奨する向きもあるが、これも避けたいパターン。
・3.を好みの人も多いようである。個人的には好きではない。テーブル定義とEntityの分離がなされていない。Entityの使いまわしができない。などの問題がある。
・4.JDBCにはデータベースのテーブルからカラム情報(メタデータ)を取得する機能がある。これを使って事前にSQLを生成しておくことができる。テーブルに対応するEntityソースを生成することも可能である。また実行時にもカラム情報を取得できるので、直前にこれを取得してSQLを生成できる。問題はJOINに対応できないということ。指定をすればJOINのSQLを生成するようにもできるが、その指定自体が複雑になるので実用性には乏しい。メリットはSQLを書く手間がかからない、SQLに間違いがないということ。
・5.はよく用いられている方法で、SQLをテキストファイルやXMLファイルに記述する方法。これはSQLがどこにあるのかが分からなくなってしまうことがない。集中管理することができる。4.と並んで、こちらもお勧め。
//---------------------------------------------------
//・目次 - JDBC
// http://blogs.yahoo.co.jp/artery2020/40575568.html
//・目次 - Java入門
// http://blogs.yahoo.co.jp/artery2020/39975776.html
//・目次 - ビジネスパーソンの常識と非常識
// http://blogs.yahoo.co.jp/artery2020/39728331.html
//・目次 - 論理・発想・思考についての考察と鍛え方
// http://blogs.yahoo.co.jp/artery2020/39657784.html
//---------------------------------------------------