ORMとは、オブジェクト関係マッピング(Object Relational Mapping、略称ORM)のことであり、オブジェクト指向プログラミング言語において異なる種類のシステム間のデータを相互に変換するためのプログラム技術です。効果的に言えば、プログラミング言語内で利用可能な「仮想オブジェクトデータベース」を作成したものとなります。
resultClassを返却パラメータとして使用しない場合、すべてのクラス属性名がデータベースフィールドと一対一で対応している場合でも定義する必要があります。逆に、各テーブルには必ず対応するものが存在します。
説明
マッピング関係を設定し、フィールドとDOクラスを分離することで、保守性を向上させます。
sql.xml設定におけるパラメータについて注意:
#{}および#param#内で${}を使用しないでください。この方法ではSQLインジェクションが発生しやすくなります。iBATISに付属する
queryForList(String statementName,int start,int size)の使用は推奨されません。説明
このメソッドの実装方法は、データベースからstatementNameに対応するSQL文のすべてのレコードを取得し、その後subListを通じてstart、sizeの部分集合を取得します。このため、本番環境でOOMが発生した事例があります。この問題を解決する方法として、sqlmap.xmlに
#start#、#size#を導入することができます。例を以下に示します:Map map = new HashMap (); map.put("start", start); map.put("size", size);HashMapやHashTableを直接クエリ結果セットの出力として使用することは許可されていません。
逆例:ある開発者は、
<resultMap>を書く手間を省くために、データベースからの返却結果を受け取るために直接HashTableを使用しました。その結果、通常はbigintをLong値に変換していましたが、本番環境ではデータベースのバージョンが異なるため、BigIntegerとして解析され、本番での問題が発生しました。データテーブルのレコードを更新する際には、レコードに対応するgmt_modifiedフィールドの値を現在時刻に同時に更新する必要があります。
大規模かつ包括的なデータ更新インターフェースを作成し、POJOクラスを渡して、自分の更新対象フィールドであるかどうかに関わらず、
update table set c1=value1,c2=value2,c3=value3;という処理を行うのは正しくありません。SQL実行時に変更されていないフィールドを更新すると、エラーが発生しやすいだけでなく、効率も低下し、binlogのストレージ容量も増加します。