私は、プロジェクト内のクエリの受信オブジェクトとして List<Map<String,Object>> をよく使用します。これは便利であり、複数テーブルのクエリごとに DTO クラスを作成する必要がないことがわかります。
上記はクエリのみです。マップを DTO に適用した場合、VO にも同じ問題が発生しますか?
高洛峰2017-05-27 17:43:05
1. マップパラメータの数が多いとメンテナンスが困難になります。文字列形式でキーを識別するため、文字がプログラムされていないエラーが発生する可能性があります
2. マップをエンティティに変換します。これはリソースを消費します。あるいは、エンティティを変換せずに直接SQL層にマップを渡すことになりますが、null値の判定(このパラメータを渡すかどうか…)が必要になるため、パラメータの数が多すぎると多くの判定が必要になります。 (SQL効率が低下し、メンテナンスが容易ではありません)
3. エンティティクラスを作成するよりも、マップを作成してからパラメーター値を入力する方が時間がかかります (マップの数が少ない場合、作成時間の差は非常に小さいですが、マップの数が少ない場合、その差は非常に大きくなります)数が多いです)
4. パラメータの種類の制御。 SQL の文字列型ではないパラメータは数値に変換する必要があります。 。 。エラーは SQL に発生し、簡単に CC されます
5. オブジェクトに面し、SQL レイヤーをエンティティから分離し、結合を軽減します。そうしないとメンテナンスが面倒になります
ringa_lee2017-05-27 17:43:05
2 つの側面があると思います:
1. オブジェクト指向の考え方
2. 結局のところ、クエリを使用するときは間違いを犯しやすいです [効率とは、map.get(key) と、map.put を指します]。まあ、それは本当に良くありません
すべて私が作りました、はは、大学の先生が私にそれについて言ったと思います。 。
过去多啦不再A梦2017-05-27 17:43:05
Map はクエリ パラメーターを使用します。メソッドの呼び出し元は、メソッド プロバイダーによって提供されるメソッド パラメーターにどのキーと値のペアおよびキーと値のペアのタイプを格納できるかを単純に知りません。map.put (key, value. ) はコンパイル段階では検出できません。QueryD を使用すると、パラメーターの型と制限を正確に定義できます (JSR 303 検証)
仅有的幸福2017-05-27 17:43:05
私の理解が正しければ
データ クエリ オブジェクトは、dao クエリ メソッドの パラメータのカプセル化 を参照し、メソッドの戻り値を参照しません。これの利点は、コードが 可読性 高く、直接使用できることです。しかし、あなたのクエリはそれをまったくサポートしていませんが、ユーザーに確実に知らせるにはどうすればよいですか?map
作为接口参数, 使用者想要确定具体的查询条件非常困难, 而且给外部接口调用的灵活性太高, 比如 使用者在map
中增加一个x
を使用する必要があります。
黄舟2017-05-27 17:43:05
マップの利点:
リーリーJavabeans の利点をご覧ください:
リーリー長所と短所を比較検討し、チーム開発と JavaBeans の方が優れている場合は、個人のプロジェクトは問題ではありません。
追加大歓迎です! ~