zoukankan      html  css  js  c++  java
  • 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中最常用最灵活最难得家伙,这样就可以用起来了。

  • 相关阅读:
    paper 30 :libsvm的参数说明
    paper 29 :CV会议+领先研究室+专家+代码网址
    paper 28 :一些常见常用数据库的下载网站集锦
    paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
    paper 25 :SVM支持向量机是什么意思?
    paper 24 :matlab的cat函数
    paper 23 :Kullback–Leibler divergence KL散度(2)
    paper 22:kl-divergence(KL散度)实现代码
    paper 21 :Libsvm的安装和使用
    paper 20 :color moments
  • 原文地址:https://www.cnblogs.com/aacoutlook/p/9055835.html
Copyright © 2011-2022 走看看