Mybatisの元の体はIbatisであり、今ではApache Foundationから分離されています。新しい公式ウェブサイトはhttp://www.mybatis.org/です。
MyBatisソースコードを研究する前にこの注釈の魔法の使用を知りませんでしたが、パラメーターを解析するときにこの注釈があることがわかったとき、MAP <String、Map <String、Object >>などのタイプを返すと、複数のテーブルからのデータである可能性があるため、別のモデルを構築することは不可能であるため、しばしば困難であることがわかりました。
その後、この注釈を使用できます
@retention(RetentionPolicy.Runtime)@Target(elementType.Method)public @interface mapkey {string value();}この注釈がメソッドで使用されていることは明らかであり、特定の使用法は、外部マップのキーが何であるかを設定することです。これにより、新しいエンティティを作成せずに非常に複雑な結果を照会できます。
PS:@mapkey Annotationを使用してMyBatisを見て、MAPに複数のクエリレコードを受信して、get()メソッドを使用してフィールドの値を簡単に取得します。
要件シナリオ:
IDと名前の2つのフィールドを含む、データベースからいくつかのデータをバッチファインドします。結果がMAPを使用して直接受信できることを願っています。その後、名前の値をMap.get(ID)から簡単に取得できることを願っています。
質問:
次のコードを使用する場合、複数のクエリの結果がある場合、MyBatisが( "id":123)および( "name": "jack")の形式でマップの結果を保存するため、エラーが報告されます。したがって、結果を返す場合、IDや名前を含むレコードを持っていることは問題ありません。複数のレコードを返す場合、つまり、複数の( "id:123)と(" id ":124)がある場合、Mybatisは愚かで、それに対処する方法がわかりません。
map <string、object> m = abcdao.getnamesbyids(idlist);
解決策は、外部の別のマップを使用することです。
map <integer、map <string、object >> m = abcdao.getnamesbyids(idlist);
次に、この方法に注釈を追加します。
<Span style = "White-Space:pre"> </span>/** <span style = "white-space:pre"> </span> *複数のidsに基づいてバッチで名前を取得<span style = "white style =" white style:pre "> </span> style = "ホワイトスペース:pre"> </span> */<span style = "pre"> </span> @mapkey( "id")<span style = "ホワイトスペース:pre"> </span> public map <integer、map <string、object >> getnamesbyids(fist map <map <<string、object >> list);
この注釈は、最も外側のマップの鍵は、クエリ結果の「ID」という名前のフィールドの値であることを示しています。
mapper.xmlの構成は次のとおりです。
<select id = "getnamesbyids" resulttype = "java.util.map"> select id、name from tb_abc in <foreach item = "item" collection = "list" open = "(" separator = "、" close = ")
上記は、編集者が紹介したMybatis Annotationでの@mapkeyの使用に関する詳細な説明です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!