当前位置: 首页 > news >正文

MyBatis多表查询实现方式

MyBatis 的多表查询主要涉及关联查询(如一对一、一对多、多对多),可以通过 ResultMap 嵌套映射实现。

1. 嵌套ResultMap (关联查询)

通过 <association> (一对一)和 <collection> (一对多)标签嵌套映射关联对象。

示例:订单(Order)与用户(User)的一对一关系:

<resultMap id="OrderWithUserMap" type="Order">
    <id property="id" column="order_id"/>
    <result property="orderNo" column="order_no"/>
    <!-- 一对一映射用户 -->
    <association property="user" javaType="User">
        <id property="id" column="user_id"/>
        <result property="name" column="user_name"/>
    </association>
</resultMap>

<select id="getOrderWithUser" resultMap="OrderWithUserMap">
    SELECT 
        o.id AS order_id, o.order_no, 
        u.id AS user_id, u.name AS user_name
    FROM orders o
    LEFT JOIN user u ON o.user_id = u.id
</select>

2. 一对多关系(如订单与订单项)

使用 <collection> 标签映射子对象集合。

<resultMap id="OrderWithItemsMap" type="Order">
    <id property="id" column="order_id"/>
    <result property="orderNo" column="order_no"/>
    <!-- 一对多映射订单项 -->
    <collection property="items" ofType="OrderItem">
        <id property="id" column="item_id"/>
        <result property="productName" column="product_name"/>
    </collection>
</resultMap>

<select id="getOrderWithItems" resultMap="OrderWithItemsMap">
    SELECT 
        o.id AS order_id, o.order_no,
        i.id AS item_id, i.product_name
    FROM orders o
    LEFT JOIN order_item i ON o.id = i.order_id
</select>

3. 多对多关系(如用户与角色)

通过中间表关联,结合 <collection> 实现。

<resultMap id="UserWithRolesMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <collection property="roles" ofType="Role">
        <id property="id" column="role_id"/>
        <result property="name" column="role_name"/>
    </collection>
</resultMap>

<select id="getUserWithRoles" resultMap="UserWithRolesMap">
    SELECT 
        u.id AS user_id, u.name AS user_name,
        r.id AS role_id, r.name AS role_name
    FROM user u
    LEFT JOIN user_role ur ON u.id = ur.user_id
    LEFT JOIN role r ON ur.role_id = r.id
</select>


文章转载自:

http://hJG5c41v.srkwf.cn
http://9aqi97EK.srkwf.cn
http://GrzRb1uX.srkwf.cn
http://BwL2ACVk.srkwf.cn
http://ptpSr81H.srkwf.cn
http://l8MekX1D.srkwf.cn
http://5DhdLYmC.srkwf.cn
http://9YjncBoR.srkwf.cn
http://hslmUdIN.srkwf.cn
http://T9ftAHI4.srkwf.cn
http://DGKBLT2g.srkwf.cn
http://SWJw1PFa.srkwf.cn
http://2CdF9SX9.srkwf.cn
http://J1RF9dpy.srkwf.cn
http://lFaZmAu9.srkwf.cn
http://O45BRoMY.srkwf.cn
http://UwBuZDqJ.srkwf.cn
http://JsPM2mZ7.srkwf.cn
http://RXh9azUL.srkwf.cn
http://mhGIoqZs.srkwf.cn
http://IBiZPDHT.srkwf.cn
http://acUWY9al.srkwf.cn
http://hT1gyLUj.srkwf.cn
http://pW8iZ1MI.srkwf.cn
http://2eiZh3rO.srkwf.cn
http://zpql7mEp.srkwf.cn
http://bTsNvkZv.srkwf.cn
http://DxjvEueQ.srkwf.cn
http://lQK5Hp3P.srkwf.cn
http://zIx6VYlq.srkwf.cn
http://www.dtcms.com/a/57291.html

相关文章:

  • 【技术白皮书】内功心法 | 第一部分 | IP协议的目的与工作原理(IP地址)
  • Linux 生成静态库
  • yarn install时报错certificate has expired
  • TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”
  • Flow Matching 和 Rectified Flow的区别
  • 关于爱思唯尔官方Latex模版参考文献不是按照引用顺序编号,乱序问题
  • 怎么使用Sam Helper修改手机屏幕分辨率,使得游戏视野变广?
  • 为界面添加垂直滚动条事件
  • SQLiteStudio:一款免费跨平台的SQLite管理工具
  • Java对象深拷贝与浅拷贝的区别
  • 2025最新群智能优化算法:基于RRT的优化器(RRT-based Optimizer,RRTO)求解23个经典函数测试集,MATLAB
  • JeecgBoot 使用心得
  • [HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)
  • IP,MAC,ARP 笔记
  • 定时任务和分布式任务框架
  • 基于YOLO11深度学习的电瓶车进电梯检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
  • 睡不着营养贴士
  • AArch64架构及其编译器
  • Manus AI:开启Agent元年的ChatGPT时刻(附赠资料)
  • Linux教学总目录
  • Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测
  • 算法006——和为S 的两个数
  • 文档先行:构建软件开发的清晰认知体系
  • 从家用显卡到AI文生视频——Wan2.1本地部署教程与一键包分享
  • 电脑睡眠智能管控:定时、依状态灵活调整,多模式随心选
  • Go-知识-fmt
  • 模型微调-基于LLaMA-Factory进行微调的一个简单案例
  • c#财务软件专业版企业会计做账软件财务管理系统软件
  • 【技术白皮书】外功心法 | 第二部分 | 计算机运行原理(数据是用二进制数表示的)
  • MySQL索引下推