使用 Mybatis-Plus 进行一对多关联查询
如果公司允许使用 Mybatis-Plus 进行一对多关联查询,可以在 Service 层中使用 Mybatis-Plus 提供的 Wrapper 来实现。以下是一个使用 Mybatis-Plus Wrapper 进行一对多关联查询的示例:假设我们有两个表 Order 和 OrderItem,其中 Order 表包含 id、order_no、user_id 和 total_amount 字段,OrderItem 表包含 id、order_id、product_id 和 product_price 字段。现在需要查询指定用户的所有订单以及订单对应的所有订单项。OrderService.java 中定义如下查询方法:```java
public List<Order> getOrdersByUserId(Long userId) {QueryWrapper<Order> orderWrapper = new QueryWrapper<>();orderWrapper.eq("user_id", userId);List<Order> orderList = orderMapper.selectList(orderWrapper);QueryWrapper<OrderItem> orderItemWrapper = new QueryWrapper<>();orderItemWrapper.in("order_id", orderList.stream().map(Order::getId).collect(Collectors.toList()));List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemWrapper);Map<Long, List<OrderItem>> orderItemMap = orderItemList.stream().collect(Collectors.groupingBy(OrderItem::getOrderId));orderList.forEach(order -> {List<OrderItem> itemList = orderItemMap.get(order.getId());if (itemList != null) {order.setOrderItemList(itemList);}});return orderList;
}
```
在上述代码中,我们首先使用 QueryWrapper 查询指定用户的所有订单,然后使用查询到的订单列表中的订单 id 构建另一个 QueryWrapper,查询该用户所有订单项。接着,我们使用 Java 8 的 Stream API 将查询到的订单项按订单 id 进行分组,最后将订单项列表设置到对应的订单对象中,返回查询结果。
需要注意的是,该方法中使用了多条 SQL 语句进行查询,可能会导致性能问题,特别是在数据量较大的情况下。如果需要提高性能,可以考虑使用 Join 语句或者缓存等机制进行优化。
使用 Mybatis-Plus 进行一对多关联查询相关推荐
- Mybatis多表关联查询(一对多关联查询)
1.Mybatis一级缓存与二级缓存 目的:提高查询效率,降低数据库查询压力,提升系统整体性能. 一级缓存:默认开启,Session级别,同一个会话内生效. 命中缓存的情况:statementid.S ...
- mybatis一对多关联查询两种方式
mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...
- Mybatis一对多关联查询,返回值Map,字段自动映射
功能描述 由于查询字段和表名都要支持动态配置,故查询返回值需要为List<Map<String,Object>>,不定义值对象. 查询结果列需要支持自动映射,不配置类属性和数据 ...
- mybatis一对多关联查询_Mybatis 一对一、一对多的关联查询 ?
<mapper namespace="com.lcb.mapping.userMapper"> <!--association 一对一关联查询 --> &l ...
- MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)
MyBitis(iBitis)系列随笔之一:MyBitis入门实例 MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM) MyBitis(iBitis ...
- Mybatis高级应用 多表关联查询
>以订单商品数据模型为例子: 存在以下四张表,用户表user,用户订单表orders,订单明细表orderdetail,商品表items.四张表之间的关系如下图所示: 下面给出四张表结构的详细定 ...
- NHibernate之旅(10):探索父子(一对多)关联查询
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
- mysql的分页怎么不对_mysql一对多关联查询分页错误问题的解决方法
xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...
- Mybatis注解实现一对多关联映射(@Many)
mybatis注解实现一对多关联映射 @Select("<script> \n" +"\t\tselect a.*,p.punishment_money, p ...
- mysql一对多关联查询分页_mysql一对多关联查询分页错误问题的解决方法
xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...
最新文章
- 在Ubuntu 14.04 64bit上使用Sphinx转换MonaServer项目文档
- 画世界怎么用光影_【干货】详解光影的魅力及其绘画技巧,一起打造极致炫丽的光影世界吧!...
- 成熟期滞后状态的云计算:应重视云存储及安全策略
- ELK+Kafka集群日志分析系统
- ip冲突 scan windows_Linux下IP 冲突查看及解决方法
- 基于jquery的侧边栏分享导航
- (转)海岸线提取完成, 海浪排岸效果
- 湖畔大学官微改名为“湖畔创研中心”
- java文件按时间排序_如何按日期在java目录中排序文件?
- 获取springmvc中所有的Controller
- 内部通信服务Factory(WCF)
- HZHOST实现自定义FSO权限的方法及其应用
- 手机便签软件哪个好用 手机便签软件推荐
- 《Adobe Premiere Pro CS4经典教程》——1.7 Adobe Premiere Pro工作区
- 秋冬易感冒着凉 风寒感冒9大食疗方
- 信用卡3D验证相关资料
- Ubuntu 测网速
- 泛海微电动修脚器开发方案和电动修脚器单片机方案
- mysql 中的pri_关于MySQL中 主键 pri mul
- ui设计-文案(CW)