mybatis關聯查詢resultmap的使用詳解resultmap


因為該案例比較典型,所以記錄一下,恐后期有所疑問,以便用時便於會議。

案例典型在 關聯關系典型

主表一張業務模板表

[sql]  view plain  copy
 
  1. TABLE_NAME  COLUMN_NAME COMMENTS  
  2. YMIT_BIZ_TMP    PK_ID   自增主鍵  
  3. YMIT_BIZ_TMP    BIZ_TMP_NM  業務模板名稱  
  4. YMIT_BIZ_TMP    TRD_INF_ID  交易接口ID,與接口用例樹關聯  
  5. YMIT_BIZ_TMP    TRD_INF_NM  交易接口名稱  
  6. YMIT_BIZ_TMP    CRT_USR_ID  LOGINCODE  
  7. YMIT_BIZ_TMP    CRT_TM  創建時間  

 

關系表一張關聯關系表

[sql]  view plain  copy
 
  1. TABLE_NAME  COLUMN_NAME COMMENTS  
  2. YMIT_BIZTMP_FLD TEMP_ID 業務模板信息表的PK_ID  
  3. YMIT_BIZTMP_FLD MSG_ID  BSP對應報文ID  
  4. YMIT_BIZTMP_FLD FLD_ID  公共報文字段ID  

 

關聯數據表一張 報文字段表

[sql]  view plain  copy
 
  1. TABLE_NAME  COLUMN_NAME COMMENTS  
  2. YMIT_MSG_FLD    PK_ID   字段ID,自增主鍵  
  3. YMIT_MSG_FLD    MSG_ID  關聯報文,對應報文的NODE_ID值  
  4. YMIT_MSG_FLD    FLD_NM  報文字段名稱  
  5. YMIT_MSG_FLD    FLD_DESC    字段描述  
  6. YMIT_MSG_FLD    FLD_LEN 數據長度  
  7. YMIT_MSG_FLD    IS_REQ  是否必填,1為是,0為否  
  8. YMIT_MSG_FLD    DEF_VAL 默認值  
  9. YMIT_MSG_FLD    FIX_VAL 修訂值  

一次查詢,返回主表模板信息加上模板關聯的所有字段信息

一  定義接手domain

 

[java]  view plain  copy
 
  1. public class YmitBizTmpVM {  
  2.   
  3.     private String  pkId    ;// 自增主鍵  
  4.     private String  bizTmpNm    ;// 業務模板名稱  
  5.     private String  trdInfId    ;// 交易接口ID,與接口用例樹關聯  
  6.     private String  trdInfNm    ;// 交易接口名稱  
  7.     private String  crtUsrId    ;// LOGINCODE  
  8.     private String  crtTm   ;// 創建時間  
  9.     private String  msgId   ;// 報文結構樹上選擇點的pkId  
  10.     private List<YmitMsgFld> ymitMsgFld; //通訊類型對應的參數  

二 編寫resultmap

[sql]  view plain  copy
 
  1. <!--模板信息 -->  
  2.     <resultMap id="ymitBizTmpVMMap" type="cn.com.yusys.ymit.web.rest.vm.YmitBizTmpVM">  
  3.         <id column="PK_ID" property="pkId" jdbcType="VARCHAR" />  
  4.         <result column="BIZ_TMP_NM" property="bizTmpNm" jdbcType="VARCHAR" />  
  5.         <result column="TRD_INF_ID" property="trdInfId" jdbcType="VARCHAR" />  
  6.         <result column="TRD_INF_NM" property="trdInfNm" jdbcType="VARCHAR" />  
  7.         <result column="CRT_USR_ID" property="crtUsrId" jdbcType="VARCHAR" />  
  8.         <result column="CRT_TM" property="crtTm" jdbcType="VARCHAR" />  
  9.         <collection property="ymitMsgFld" javaType="java.util.List" ofType="cn.com.yusys.ymit.domain.YmitMsgFld">  
  10.             <id column="FLD_ID" property="pkId" jdbcType="VARCHAR" />  
  11.             <id column="MSG_ID" property="msgId" jdbcType="VARCHAR" />  
  12.             <result column="FLD_NM" property="fldNm" jdbcType="VARCHAR" />  
  13.             <result column="FLD_DESC" property="fldDesc" jdbcType="VARCHAR" />  
  14.             <result column="FLD_LEN" property="fldLen" jdbcType="VARCHAR" />  
  15.             <result column="IS_REQ" property="isReq" jdbcType="VARCHAR" />  
  16.             <result column="DEF_VAL" property="defVal" jdbcType="VARCHAR" />  
  17.             <result column="FIX_VAL" property="fixVal" jdbcType="VARCHAR" />  
  18.         </collection>  
  19.     </resultMap>  

詳細解釋:                    id :resultmap的標識 select語句中引用時用的,

                                  type: 查詢返回的數據類型

<id><result column>      : 都是屬性的名字對應關系分別對應表中列的名字和domain中的名字

collection                        :說明這是一個一對多的關系,多就放在這里

collection中的property是接收domain中的那個多的的屬性名字 javatype是多的類型

collection中的其他的和上邊的一樣了。

三 書寫SQL

[sql]  view plain  copy
 
  1. <select id="getTmpVm" parameterType="java.util.Map"  
  2.         resultMap="ymitBizTmpVMMap">  
  3.         select   
  4.         c.PK_ID as FLD_ID,  
  5.         c.MSG_ID,  
  6.         c.FLD_NM,  
  7.         c.FLD_DESC,  
  8.         c.FLD_LEN,  
  9.         c.IS_REQ,  
  10.         c.DEF_VAL,  
  11.         c.FIX_VAL,  
  12.         a.PK_ID,  
  13.         a.BIZ_TMP_NM,  
  14.         a.TRD_INF_ID,  
  15.         a.TRD_INF_NM,  
  16.         a.CRT_USR_ID,  
  17.         a.CRT_TM  
  18.   
  19.         from ymit_biz_tmp a,ymit_biztmp_fld b,ymit_msg_fld c  
  20.         where  
  21.         a.trd_Inf_Id=#{condition.trdInfId}  
  22.         and b.msg_id=#{condition.msgId}  
  23.         and  
  24.         a.pk_id=b.temp_id and b.msg_id =c.msg_id and b.fld_id = c.pk_id  
  25.   
  26.     </select>  

詳細介紹:

因為兩張表的有重名的,所以呢,在查詢的時候呢,將其中的一個用as給起個暫時名字,然后對應到resultmap中的那個,

曲線救國。

然后就沒有然后了。

resultmap作為mybatis中最常用最靈活最難得家伙,這樣就可以用起來了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM