mybatis一对多查询功能

发布时间 - 2026-01-10 23:08:20    点击率:

 首先,我们还是先给出一个需求:根据订单id查询订单明细——我们知道,一个订单里面可以有多个订单的明细(需求不明确的同学,请留言或者去淘宝网上的订单处点一下就知道了)。这个时候,一个订单,对应多个订单的id。这种需求出现的时候,我们应该如何查询呢?

  此时我们的数据模型如下图(左)由于查询用户也是我们的需求,所以就在原有的基础上进行扩展,数据模型如下(右):

    很显然,如果用resultType的方式去实现的话,是不合理的了。因为我们需要创建一个既有订单又有订单明细的pojo然后呢,我们的mybatis框架会为我们映射出很多个pojo对象(有多少个订单明细就有多少个对象)。

    所以我们需要使用resultMap的方式进行处理。解决问题的思路是:在orders类中增加一个订单明细的List字段将list的类型定义为Orderdetail类型。然后通过配置文件,将得到的数据,通过resultMap的collection标签进行映射到list中。

    具体实现如下:

  sql语句

    确定主查询表:订单表

    确定关联查询表:订单明细表

    在一对一查询基础上添加订单明细表关联即可。

SELECT 
 orders.*,
 USER.username,
 USER.sex,
 USER.address,
 orderdetail.id orderdetail_id,
 orderdetail.items_id,
 orderdetail.items_num,
 orderdetail.orders_id
FROM
 orders,
 USER,
 orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id

  问题展示

    查询完毕以后,我们发现了一个问题:如图所示,我们的id出现了多条,这是因为数据库中对应的多个订单详情共同使用一个订单id导致的。这就导致了每条记录中都会出现一个orders的记录。具体解决办法,开始的时候就说了,这里就不再赘述了。

  在orders中添加list订单明细属性  

  

    定义resultMap

<!-- 订单及订单明细的resultMap
  使用extends继承,不用再重复用户的映射
   -->
  <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap">
    <!-- 订单信息 -->
    <!-- 用户信息 -->
    <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 -->
    <!-- 订单明细信息
    一个订单关联查询出了多条明细,要使用collection进行映射
    collection:对关联查询到多条记录映射到集合对象中
    property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性
    ofType:指定映射到list集合属性中pojo的类型
     -->
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
       <!-- id:订单明细唯 一标识
       property:要将订单明细的唯 一标识 映射到cn.itcast.mybatis.po.Orderdetail的哪个属性
        -->
       <id column="orderdetail_id" property="id"/>
       <result column="items_id" property="itemsId"/>
       <result column="items_num" property="itemsNum"/>
       <result column="orders_id" property="ordersId"/>
     </collection>
  </resultMap>

      

  mapper  

  

  总结

    其实就是使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。

以上所述是小编给大家介绍的mybatis一对多查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# mybatis  # 一对多查询  # Mybatis中的高级映射一对一、一对多、多对多  # 解决mybatis plus 一对多分页查询问题  # MybatisPlus实现对象嵌套关联查询一对多List集合查询  # MyBatisPlus 一对多、多对一、多对多的完美解决方案  # MyBatis如何实现多表查询(多对一、一对多)  # 解决mybatis一对多关联查询多条数据只显示一条的问题  # mybatis 一对一、一对多和多对多查询实例代码  # Mybatis一对多与多对一查询处理详解  # MyBatis一对多关系映射方式小结  # 多条  # 多个  # 基础上  # 小编  # 就在  # 出了  # 就有  # 在此  # 说了  # 又有  # 这就  # 给大家  # 这个时候  # 解决问题  # 一个问题  # 要将  # 淘宝  # 我们应该  # 这是因为  # 会为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何在宝塔面板创建新站点?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何在七牛云存储上搭建网站并设置自定义域名?  教你用AI将一段旋律扩展成一首完整的曲子  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何在阿里云虚拟主机上快速搭建个人网站?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何处理表单验证?(Requests代码示例)  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何在新浪SAE免费搭建个人博客?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  香港服务器网站卡顿?如何解决网络延迟与负载问题?  深入理解Android中的xmlns:tools属性  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel如何使用.env文件管理环境变量?(最佳实践)  UC浏览器如何设置启动页 UC浏览器启动页设置方法  如何用腾讯建站主机快速创建免费网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何处理和验证JSON类型的数据库字段  如何快速配置高效服务器建站软件?  详解Android中Activity的四大启动模式实验简述  音响网站制作视频教程,隆霸音响官方网站?  详解jQuery中的事件  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何在宝塔面板中创建新站点?  焦点电影公司作品,电影焦点结局是什么?  Laravel Docker环境搭建教程_Laravel Sail使用指南  如何在云指建站中生成FTP站点?  Laravel如何使用withoutEvents方法临时禁用模型事件  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  高端云建站费用究竟需要多少预算?  iOS验证手机号的正则表达式  如何在万网开始建站?分步指南解析  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何在IIS管理器中快速创建并配置网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何在不使用负向后查找的情况下匹配特定条件前的换行符  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何在局域网内绑定自建网站域名?