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前后端分离项目搭建指南
如何在不使用负向后查找的情况下匹配特定条件前的换行符
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何在局域网内绑定自建网站域名?

