首页 > 其他分享 >mybatis 复杂类型返回

mybatis 复杂类型返回

时间:2023-06-01 23:04:30浏览次数:29  
标签:返回 orderId 复杂 detail private public mybatis Integer order


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

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

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

功能效果概述图:

mybatis 复杂类型返回_mysql

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>

配图理解如下图:

mybatis 复杂类型返回_mysql_02

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映射文件递归查

mybatis 复杂类型返回_mysql_02

t

上诉sql中,mybtais 支持递归查询的方式,如下:

<collection property="menuList" select="findAllMenuInfoLevel" column="{parentId=id,status=status,userId=user_id}"></collection>

属性说明:

property属性: 对应的entity里面的某个属性,如下:
public class Menu{private String name;

private List<Menu> menuList;

}
select属性:  递归调用的查询语句。
column属性:  可携带调用 slelect属性指定的 查询语句,将参数携带 进行查询。

 

 

 

标签:返回,orderId,复杂,detail,private,public,mybatis,Integer,order
From: https://blog.51cto.com/u_14671216/6398505

相关文章

  • Mybatis20_Mybatis的增删改查操作3
    一、MyBatis的插入数据操作1.编写UserMapper映射文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappername......
  • Mybatis20_MyBatis的相应API4
    一、SqlSession工厂构建器SqlSessionFactoryBuilder常用API:SqlSessionFactorybuild(InputStreaminputStream)通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象 其中,Resources工具类,这个类在org.apache.ibatis.io包中(ibatis是mybatis的前身......
  • 手写mybatis框架1
    引⼊相关依赖   35pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="h......
  • 使用dom4j解析mybatis核心配置文件
    1. 代码   32-34test代码在com.powernode.xml.testParseXMLByDom4jTestpackagecom.powernode.xml.test;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.Node;importorg.dom4j.io.SAXReader;importorg.junit.Test;importjava.io.InputStream......
  • Java中将网上的png,jpg等存储在图片服务器中并且转成pdf,并且返回相应的url地址。
    通常在开发的时候,我们会遇到图片上传的功能,特别是有很多是提供url地址的方式。所以需要提供一个将url的图片等存储起来,然后提供一个我们自己的地址给用户使用。第一步:提供pdfbox的jar包。准备相应的maven    <dependency><groupId>org.apache.pdfbox</groupId......
  • Mybatis 数据库Mysql时间范围内数据查询非常慢的解决办法
    表中数据量过大,目前已有300万条,查询user_name数据速度非常慢,如果不使用索引,想优化sql来提高查询速度,在调试过程中发现,写sql查询数据库时,传入时间段查询部分为:<!--大于开始时间-->andsw.TIME>=to_date(CONCAT('2018-09-10','00:00:00'),'yyyy-mm-ddhh24:mi:ss')<!--小于结束......
  • Python multipart/form-data上传图片,包含file和其他参数的复杂情况
    我们先来看看multipart/form-data上传原理,如下图:   如上图,我们的请求头必须包含一个特殊的请求头信息:Content-Type,类型为:multipart/form-data,而且还要有一个内容分割符(boundary)用于分割请求体中的多个post的内容。因为接收方解析和还原文件必须要根据这个boundary......
  • MyBatis ${} 和 #{}
    http://www.mybatis.org/mybatis-3/sqlmap-xml.html 下面有一个非官网说明:https://lustforge.com/2014/02/05/mybatis-query-optimization-dollar-sign-be-damned/ ......
  • (总结)HTTP常见错误返回代码
    (总结)HTTP常见错误返回代码 Browser, WebServer |作者: 谋万世全局者 http,常见错误,总结,返回代码HTTP返回状态代码当用户试图通过HTTP或FTP协议访问一台运行主机上的内容时,Web服务器返回一个表......
  • Mybatis的五种分页方式详解
     第一种:LIMIT关键字1,mapper代码select*fromtb_userlimit#{pageNo},#{pageSize}2,业务层直接调用publicListfindByPageInfo(PageInfoinfo){returnuserMapper.selectByPageInfo(info);}3,优点灵活性高,可优化空间大mysql分页语句优化4,缺点实现复杂。 第......