因為該案例比較典型,所以記錄一下,恐后期有所疑問,以便用時便於會議。
案例典型在 關聯關系典型
主表一張業務模板表
- TABLE_NAME COLUMN_NAME COMMENTS
- YMIT_BIZ_TMP PK_ID 自增主鍵
- YMIT_BIZ_TMP BIZ_TMP_NM 業務模板名稱
- YMIT_BIZ_TMP TRD_INF_ID 交易接口ID,與接口用例樹關聯
- YMIT_BIZ_TMP TRD_INF_NM 交易接口名稱
- YMIT_BIZ_TMP CRT_USR_ID LOGINCODE
- YMIT_BIZ_TMP CRT_TM 創建時間
關系表一張關聯關系表
- TABLE_NAME COLUMN_NAME COMMENTS
- YMIT_BIZTMP_FLD TEMP_ID 業務模板信息表的PK_ID
- YMIT_BIZTMP_FLD MSG_ID BSP對應報文ID
- YMIT_BIZTMP_FLD FLD_ID 公共報文字段ID
關聯數據表一張 報文字段表
- TABLE_NAME COLUMN_NAME COMMENTS
- YMIT_MSG_FLD PK_ID 字段ID,自增主鍵
- YMIT_MSG_FLD MSG_ID 關聯報文,對應報文的NODE_ID值
- YMIT_MSG_FLD FLD_NM 報文字段名稱
- YMIT_MSG_FLD FLD_DESC 字段描述
- YMIT_MSG_FLD FLD_LEN 數據長度
- YMIT_MSG_FLD IS_REQ 是否必填,1為是,0為否
- YMIT_MSG_FLD DEF_VAL 默認值
- YMIT_MSG_FLD FIX_VAL 修訂值
一次查詢,返回主表模板信息加上模板關聯的所有字段信息
一 定義接手domain
- public class YmitBizTmpVM {
- private String pkId ;// 自增主鍵
- private String bizTmpNm ;// 業務模板名稱
- private String trdInfId ;// 交易接口ID,與接口用例樹關聯
- private String trdInfNm ;// 交易接口名稱
- private String crtUsrId ;// LOGINCODE
- private String crtTm ;// 創建時間
- private String msgId ;// 報文結構樹上選擇點的pkId
- private List<YmitMsgFld> ymitMsgFld; //通訊類型對應的參數
二 編寫resultmap
- <!--模板信息 -->
- <resultMap id="ymitBizTmpVMMap" type="cn.com.yusys.ymit.web.rest.vm.YmitBizTmpVM">
- <id column="PK_ID" property="pkId" jdbcType="VARCHAR" />
- <result column="BIZ_TMP_NM" property="bizTmpNm" jdbcType="VARCHAR" />
- <result column="TRD_INF_ID" property="trdInfId" jdbcType="VARCHAR" />
- <result column="TRD_INF_NM" property="trdInfNm" jdbcType="VARCHAR" />
- <result column="CRT_USR_ID" property="crtUsrId" jdbcType="VARCHAR" />
- <result column="CRT_TM" property="crtTm" jdbcType="VARCHAR" />
- <collection property="ymitMsgFld" javaType="java.util.List" ofType="cn.com.yusys.ymit.domain.YmitMsgFld">
- <id column="FLD_ID" property="pkId" jdbcType="VARCHAR" />
- <id column="MSG_ID" property="msgId" jdbcType="VARCHAR" />
- <result column="FLD_NM" property="fldNm" jdbcType="VARCHAR" />
- <result column="FLD_DESC" property="fldDesc" jdbcType="VARCHAR" />
- <result column="FLD_LEN" property="fldLen" jdbcType="VARCHAR" />
- <result column="IS_REQ" property="isReq" jdbcType="VARCHAR" />
- <result column="DEF_VAL" property="defVal" jdbcType="VARCHAR" />
- <result column="FIX_VAL" property="fixVal" jdbcType="VARCHAR" />
- </collection>
- </resultMap>
詳細解釋: id :resultmap的標識 select語句中引用時用的,
type: 查詢返回的數據類型
<id><result column> : 都是屬性的名字對應關系分別對應表中列的名字和domain中的名字
collection :說明這是一個一對多的關系,多就放在這里
collection中的property是接收domain中的那個多的的屬性名字 javatype是多的類型
collection中的其他的和上邊的一樣了。
三 書寫SQL
- <select id="getTmpVm" parameterType="java.util.Map"
- resultMap="ymitBizTmpVMMap">
- select
- c.PK_ID as FLD_ID,
- c.MSG_ID,
- c.FLD_NM,
- c.FLD_DESC,
- c.FLD_LEN,
- c.IS_REQ,
- c.DEF_VAL,
- c.FIX_VAL,
- a.PK_ID,
- a.BIZ_TMP_NM,
- a.TRD_INF_ID,
- a.TRD_INF_NM,
- a.CRT_USR_ID,
- a.CRT_TM
- from ymit_biz_tmp a,ymit_biztmp_fld b,ymit_msg_fld c
- where
- a.trd_Inf_Id=#{condition.trdInfId}
- and b.msg_id=#{condition.msgId}
- and
- a.pk_id=b.temp_id and b.msg_id =c.msg_id and b.fld_id = c.pk_id
- </select>
詳細介紹:
因為兩張表的有重名的,所以呢,在查詢的時候呢,將其中的一個用as給起個暫時名字,然后對應到resultmap中的那個,
曲線救國。
然后就沒有然后了。
resultmap作為mybatis中最常用最靈活最難得家伙,這樣就可以用起來了。