功能:查询一个数据列表 且每个数据中包含各自的子数据集合

使用场景:1. 当需要查询多订单数据且同时订单数据中需要包含订单明细数据时

2. 当需要查询多评论数据且同时评论数据中需要包含评论回复数据时

功能效果概述图:

1. Dao 层定义

package com.ljw.dao;

import java.util.List;
import com.ljw.vo.Order; public interface OrderMapper {
List<Order> findAllOrder();
}

2. Mybatis 配置

<!-- 实体类映射 -->
<resultMap type="cn.ljw.vo.Order" id="OrderMap">
<id column="order_id" jdbcType="INTEGER" property="orderId" />
<result column="order_number" jdbcType="VARCHAR" property="orderNumber" />
<result column="order_time" jdbcType="TIMESTAMP" property="orderTime" />
<collection property="orderDetails" ofType="cn.ljw.vo.OrderDetail" javaType="java.util.List">
<id column="detail_order_detail_id" jdbcType="INTEGER" property="orderDetailId" />
<result column="detail_order_id" jdbcType="INTEGER" property="orderId" />
<result column="detail_commodity_name" jdbcType="VARCHAR" property="commodityName" />
<result column="detail_commodity_number" jdbcType="INTEGER" property="commodityNumber" />
</collection>
</resultMap> <!-- 查询代码 -->
<select id="findAllOrder" resultMap="OrderMap">
SELECT
order.order_id,
order.order_number,
order.order_time,
order_detail.order_detail_id AS detail_order_detail_id,
order_detail.order_id AS detail_order_id,
order_detail.commodity_name AS detail_commodity_name,
order_detail.commodity_number AS detail_commodity_number
FROM order
LEFT JOIN order_detail ON order.order_id = order_detail.order_id
</select>

3. po 实体类定义

/**
* 订单表
*/
public class Order implements Serializable {
/**
* 订单ID
*/
private Integer orderId;
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单时间
*/
private Date orderTime;
/**
* 订单明细集合
*/
private List<OrderDetail> orderDetails; public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
public List<OrderDetail> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<OrderDetail> orderDetails) {
this.orderDetails = orderDetails;
}
} /**
* 订单明细表
*/
public class OrderDetail implements Serializable {
/**
* 订单明细ID
*/
private Integer orderDetailId;
/**
* 订单ID
*/
private Integer orderId;
/**
* 商品名称
*/
private String commodityName;
/**
* 商品数量
*/
private Integer commodityNumber; public Integer getOrderDetailId() {
return orderDetailId;
}
public void setOrderDetailId(Integer orderDetailId) {
this.orderDetailId = orderDetailId;
}
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public String getCommodityName() {
return commodityName;
}
public void setCommodityName(String commodityName) {
this.commodityName = commodityName;
}
public Integer getCommodityNumber() {
return commodityNumber;
}
public void setCommodityNumber(Integer commodityNumber) {
this.commodityNumber = commodityNumber;
}
}

Mybatis 查询一个对象包含多个子对象 (List 包含 List)的更多相关文章

  1. mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

    mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

  2. 云笔记项目-MyBatis返回自增类型&堆栈对象补充理解

    在云笔记项目中,讲到了MySql的自增,MyBatis查询到自增类型数据后可以设置返回到参数属性,其中学习了MySql的自增写法,堆栈对象等知识. MySql数据类型自增 建立一张Person表,其中 ...

  3. MyBatis之ResultMap简介,关联对象

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultM ...

  4. mybatis查询语句的背后之封装数据

    转载请注明出处... 一.前言 继上一篇mybatis查询语句的背后,这一篇主要围绕着mybatis查询的后期操作,即跟数据库交互的时候.由于本人也是一边学习源码一边记录,内容难免有错误或不足之处,还 ...

  5. spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)

    spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象) 它的出现原因: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用 ...

  6. MySQL和mybatis查询相关

    0.mybatis的xml文件头 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapp ...

  7. MyBatis Generator 自动生成的POJO对象的使用(二)

    四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...

  8. MyBatis Generator 自动生成的POJO对象的使用(一)

    MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境): Java Model Objects(总是生成) SQL Map Fi ...

  9. django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口

    """ 返回查询集的方法称为过滤器 all() 返回查询集中所有数据 filter() 返回符合条件的数据 一.filter(键=值) 二.filter(键=值,键=值) ...

随机推荐

  1. numpy中的tile函数

    tile()函数可以很方便的生成多维数组.它有两个参数,第一个数是原始数组;第二个表示如何来生成,第一个数字表示生成几行,第二个表示每行有多少个原始数组(如果只写一个数字,那么就默认是一行). fro ...

  2. BZOJ - 2553 :禁忌(AC自动机+贪心+奇怪的矩阵)

    Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传说的时代, ...

  3. select查询语句执行顺序

    查询中用到的关键词主要包含六个,并且他们的顺序依次为select--from--where--group by--having--order by其中select和from是必须的,其他关键词是可选的 ...

  4. Standby Redo Log 的设定原则、创建、删除、查看、归档位置

    设定: 1.每个standby redo log file 至少要和primary database的redo log 一样大,为了方便管理,Oracle 建议主备库的redo log 设置成一样的大 ...

  5. bzoj 3796 Mushroom追妹纸 —— 后缀数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3796 先把三个串拼在一起,KMP 求 s1 , s2 中每个位置和 s3 的匹配情况: 注意 ...

  6. TCP点对点穿透探索--失败

    TCP点对点穿透探索 点对点穿透是穿透什么 点对点穿透,需要实现的是对NAT的穿透.想实现NAT的穿透,当然要先了解NAT到底是什么,以及NAT是用来干什么的.NAT全称Network Address ...

  7. SimpliciTI使用

    SimpliciTI组网过程介绍 1.SimpliciTI支持点对点和星形的网络拓扑结构.   下面介绍以AP为中心的SimpliciTI网路协议的星形拓扑结构通信过程 1)当ED节点上电之后就扫描信 ...

  8. java基础知识 学习 关于URL中传递的参数含有特殊字符

    有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.下表中列出了一些URL特殊符号及编码                                   ...

  9. 14 vue学习 postcssrc eslintrc.js babelrc

    一  .postcssrc.js 众所周知为兼容所有浏览器,有的CSS属性需要对不同的浏览器加上前缀,然而有时添加一条属性,需要添加3~4条类似的属性只是为了满足浏览器的兼容,这不仅会增加许多的工作量 ...

  10. bootstrap下拉框式标签页

    <ul id="myTab" class="nav nav-tabs"> <li class="active"> & ...