mybatis的级联查询
级联是在resultMap标签中配置。级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多会增加系统的复杂度,同事降低系统的性能,次增彼减,所以记录超过3层时,就不要考虑使用级联了,因为这样会造成多个对象的关联,导致系统的耦合、负载和难以维护。
MyBatis中的级联分2种:
1.一对一(association)
2.一对多(collection)
一、一对一
A表一对一B表情况下A对象当中有外键关联的B表的对象作为属性,A对象中有一个B对象属性。当查A对象时,如果想把B对象属性同时获取,有三种方式。
三种方式:
1、多表联合查询,即A表和B表联合查询,同事查出A、B表的字段,然后配置resultMap标签。
resultMap标签的配置如下:
1 <resultMap id="AResultMap" type="com.A" > 2 <id column="A_ID" property="AId" jdbcType="INTEGER" /> 3 <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" /> 4 <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" /> 5 <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" /> 6 <!-- 一下是对A对象中B的属性的映射配置 --> 7 <result column="B_id" property="b.BId"/> 8 <result column="ONLINE_DATE" property="b.onlineDate"/> 9 <result column="LAST_COMM_TIME" property="b.lastCommTime"/> 10 <result column="STATUS_CODE" property="b.statusCode"/> 11 </resultMap>
2、多表联合查询,即A表和B表联合查询,同事查出A、B表的字段,然后通过association标签配置resultMap标签。
resultMap标签的配置如下:
<resultMap id="AResultMap" type="com.A" > <id column="A_ID" property="AId" jdbcType="INTEGER" /> <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" /> <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" /> <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" /> <!-- 一下是对A对象中B的属性的映射配置 --> <association property="b" javaType="com.B"> <id column="B_id" property="bId"/> <result column="ONLINE_DATE" property="onlineDate"/> <result column="LAST_COMM_TIME" property="lastCommTime"/> <result column="STATUS_CODE" property="statusCode"/> </association> </resultMap>
3、只查询A表字段,然后通过外键调用查询B表的select标签查询B表对象,通过association标签配置resultMap标签。
resultMap标签的配置如下:
1 <resultMap id="AResultMap" type="com.A" > 2 <id column="A_ID" property="AId" jdbcType="INTEGER" /> 3 <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" /> 4 <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" /> 5 <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" /> 6 <!-- 一下是对A对象中B的属性的映射配置 --> 7 <association property="b" column="B_ID" select="com.BMapper.selectBById"/> 8 </resultMap>
第三种方式只需要单表查询,但需要分别查询A表和B表,通过外键调用B表的select。association标签中调用的B表的select不通过BMapper的接口,因此在BMapper文件对应的接口中可以不写selectBById方法。
二、一对多
B一对多A只需在resultMap标签中配置association标签即可。
<resultMap type="B" id="getB"> <result property="Bid" column="Bid" /> <collection property="AList" column="Bid" javaType="list" select="getAListByBid"/> </resultMap>
本文来自博客园,作者:hellowworld!,转载请注明原文链接:https://www.cnblogs.com/zhangsai/p/17753912.html
posted on 2023-10-10 10:12 hellowworld! 阅读(531) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!