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 = newHashMap (); 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のストレージも増加させます。