欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis中的多表连接查询(包括一对一、多对一)

程序员文章站 2022-05-23 17:36:12
...

1、背景三张表

service:商品信息表

orders:订单信息表

appraise:评论信息表

其中 service.id 对应 orders.serviceOrDemandId,orders.order_id 对应 appraise.order_id

Mybatis中的多表连接查询(包括一对一、多对一)

2、目的:给定商品 ID 查询该商品的所有评论信息;

3、分析:一个商品对应多个订单,一个订单对应一个评论;即 service 与 orders 为一对多关系,orders 与 appraise 为一对一关系;

4、mysql语句:(假设需要查询的商品 ID 为1

select
    service.*,orders.*,appraise.*
from 
    service 
left join orders 
on 
    service.id=orders.serviceOrDemandId
left join
    appraise 
on
    appraise.order_id = orders.order_id
where
    service.id = 1;

5、dao层:

Service selectServiceAndAppraiseById(Integer id);

6、mapper.xml 语句

<resultMap id="ServiceAndAppraiseResultMap" type="org.lyy.entity.Service">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="user_id" jdbcType="VARCHAR" property="userId" />
    ...
    <collection property="ordersList" column="id" javaType="ArrayList"
                ofType="org.lyy.entity.Orders" select="selectOrderBySid" />
  </resultMap>

  <resultMap id="OrderAndAppraiseResultMap" type="org.lyy.entity.Orders">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="order_id" jdbcType="VARCHAR" property="orderId" />
    <result column="serviceOrDemandId" jdbcType="INTEGER" property="serviceordemandid" />
    ...
    <association property="appraises" column="order_id" javaType="org.lyy.entity.Appraise" select="selectAppraiseByOid" />
  </resultMap>

  <resultMap id="AppraiseResultMap" type="org.lyy.entity.Appraise">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="order_id" jdbcType="VARCHAR" property="orderId" />
    ...
  </resultMap>

  <select id="selectServiceAndAppraiseById" parameterType="java.lang.Integer" resultMap="ServiceAndAppraiseResultMap">
    select
    <include refid="Base_Column_List" />
    from service
    where id = #{id,jdbcType=INTEGER}
  </select>

  <select id="selectOrderBySid" resultMap="OrderAndAppraiseResultMap" parameterType="java.lang.Integer" >
    SELECT *
    FROM orders
    WHERE serviceOrDemandId = #{id}
  </select>

  <select id="selectAppraiseByOid" resultMap="AppraiseResultMap" parameterType="java.lang.String" >
    SELECT *
    FROM appraise
    WHERE order_id = #{order_id}
  </select>

7、参数解析

Mybatis中的多表连接查询(包括一对一、多对一) Mybatis中的多表连接查询(包括一对一、多对一)

 

相关标签: Java