MyBatis中连表查询,按主表分页的方法

11 篇文章 0 订阅

问题描述:

查询一张订单表,但是一张订单中含有多个订单明细(多个商品),按一张订单为单位查询,需查询此订单下的所有商品。

订单表:

订单明细表:

解决方法:

订单实体类:

package com.kgc.ymw.entity;

import java.util.Date;
import java.util.List;

public class Order {
    private Integer id;

    private Integer userid;

    private String loginname;

    private String useraddress;

    private Date createtime;

    private Float cost;

    private String serialnumber;

    private Integer isdelete;

    private Integer ispay;

    private List<OrderDetail> list;//在实体类中增加一个订单详情List集合的属性list

    //省略setter,getter方法
}

订单order.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kgc.ymw.dao.OrderMapper">
  <resultMap id="BaseResultMap" type="com.kgc.ymw.entity.Order">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="userId" jdbcType="INTEGER" property="userid" />
    <result column="loginName" jdbcType="VARCHAR" property="loginname" />
    <result column="userAddress" jdbcType="VARCHAR" property="useraddress" />
    <result column="createTime" jdbcType="TIMESTAMP" property="createtime" />
    <result column="cost" jdbcType="REAL" property="cost" />
    <result column="serialNumber" jdbcType="VARCHAR" property="serialnumber" />
    <result column="isDelete" jdbcType="INTEGER" property="isdelete" />
    <result column="ispay" jdbcType="INTEGER" property="ispay" />
    <!--   使用collection标签,属性名为list,ofType为集合的泛型,select为订单子查询的id   -->
    <collection property="list" ofType="OrderDetail" select="selectList" column="id"></collection>
  </resultMap>
  <resultMap id="detailList" type="OrderDetail">
    <id column="id" property="id"/>
    <result column="orderId" property="orderid"/>
    <result column="productId" property="productid"/>
    <result column="quantity" property="quantity"/>
    <result column="cost" property="cost"/>
    <result column="fileName" property="filename"/>
    <result column="name" property="name"/>
    <result column="price" property="price"/>
  </resultMap>
  <sql id="Base_Column_List">
    id, userId, loginName, userAddress, createTime, cost, serialNumber, isDelete, ispay
  </sql>

  <!--   订单主查询   -->
  <select id="selectByUserId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select eo.*,eu.`type`,eu.userName from easybuy_order eo
    inner join easybuy_user eu on eu.id =eo.userId  and eu.status = 1
    where  eo.isDelete=0
    <if test="identify!=null and identify==0">
      and eo.userId = #{userId}
    </if>
    <if test="identify!=null and identify==1 ">
      and eo.userId != #{userId}
    </if>
    <if test="ispay!=null and ispay!='' and ispay!=-3">
      and eo.ispay = #{ispay}
    </if>
    <if test="userName!=null and userName!=''">
      and eu.userName = #{userName}
    </if>
    <if test="serialNumber!=null and serialNumber!=''">
      and eo.serialNumber like "%"#{serialNumber}"%"
    </if>
    order by eo.createTime desc
  </select>

  <!--  订单明细子查询  -->
  <select id="selectList" resultMap="detailList">
    select * from easybuy_order_detail eod
    where eod.orderId=#{id}
  </select>

</mapper>

查询的时候直接调订单主查询就ok了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值