mybatis关联查询resultmap的使用详解resultmap

因为该案例比较典型,所以记录一下,恐后期有所疑问,以便用时便于会议。

案例典型在 关联关系典型

主表一张业务模板表

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中最常用最灵活最难得家伙,这样就可以用起来了。

阅读更多
文章标签: mybatis
个人分类: sql
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭