zoukankan      html  css  js  c++  java
  • 【Mybatis】---高级映射之一对多查询

       在上一篇博客中,对mybatis的高级映射----一对一查询进行了讲解.这篇博客中,将在上一篇博客的基础上讲解mybatis的高级映射.表之间的关联关系,详情查看上篇博客.

    需求

    查询订单及订单明细的信息

    sql语句

    主表为orders(订单表),关联表为ordersDetail(订单明细表),在一对一查询基础上添加订单明细表关联即可.


    SELECT 
      orders.*,
      USER.username,
      USER.sex,
      USER.address,
      orderdetail.id orderdetail_id,
      orderdetail.items_id,
      orderdetail.items_num,
      orderdetail.orders_id
    FROM
      orders,
      USER,
      orderdetail
    WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
    

    修改pojo

    在orders中添加list订单明细属性

     private List<Orderdetail> orderdetails;

    mapper.xml

     <!-- 查询订单关联查询用户及订单明细,使用resultmap -->
      <select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
        SELECT
        orders.*,
        USER.username,
        USER.sex,
        USER.address,
        orderdetail.id orderdetail_id,
        orderdetail.items_id,
        orderdetail.items_num,
        orderdetail.orders_id
        FROM
        orders,
        USER,
        orderdetail
        WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
      </select>

    resultMap定义

    <!-- 订单及订单明细的resultMap
    	使用extends继承,不用在中配置订单信息和用户信息的映射
    	 -->
    	<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
    		<!-- 订单信息 -->
    		<!-- 用户信息 -->
    		<!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 -->
    		
    		
    		<!-- 订单明细信息
    		一个订单关联查询出了多条明细,要使用collection进行映射
    		collection:对关联查询到多条记录映射到集合对象中
    		property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性
    		ofType:指定映射到list集合属性中pojo的类型
    		 -->
    		 <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
    		 	<!-- id:订单明细唯 一标识
    		 	property:要将订单明细的唯 一标识 映射到cn.itcast.mybatis.po.Orderdetail的哪个属性
    		 	  -->
    		 	<id column="orderdetail_id" property="id"/>
    		 	<result column="items_id" property="itemsId"/>
    		 	<result column="items_num" property="itemsNum"/>
    		 	<result column="orders_id" property="ordersId"/>
    		 </collection>
    		
    	
    	</resultMap>
    

    mapper.java

      //查询订单及其订单明细
        public List<Orders> findOrdersAndOrderDetailResultMap() throws Exception;

    总结:

    mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。

    使用resultType实现:

    将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。

    所以在一对多的查询时,建议使用resultMap.

  • 相关阅读:
    java中的 equals 与 ==
    String类的内存分配
    SVN用命令行更换本地副本IP地址
    npoi 设置单元格格式
    net core 微服务框架 Viper 调用链路追踪
    打不死的小强 .net core 微服务 快速开发框架 Viper 限流
    net core 微服务 快速开发框架 Viper 初体验20201017
    Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输
    net core 微服务 快速开发框架
    Viper 微服务框架 编写一个hello world 插件02
  • 原文地址:https://www.cnblogs.com/chenxiaochan/p/7253428.html
Copyright © 2011-2022 走看看