Mybatis中的多表连接查询(包括一对一、多对一)
程序员文章站
2022-05-23 17:36:12
...
1、背景:(三张表)
service:商品信息表
orders:订单信息表
appraise:评论信息表
其中 service.id 对应 orders.serviceOrDemandId,orders.order_id 对应 appraise.order_id;
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中的多表查询 —— 多对多
-
Mybatis学习笔记------mybatis的多表查询-一对多
-
关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)
-
Java 框架 04 — MyBatis_03(连接池和事务的深入、动态sql语句、多表查询_1对1_1对多_多对多)
-
Mybatis中的多表连接查询(包括一对一、多对一)
-
mybatis连接池,动态的Sql语句,多表查询一对多,多对多
-
MyBatis多表连接一对一与一对多
-
DJango 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询
-
Mybatis中的关系映射(一对一,一对多,多对多)