• 【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.

  • 相关阅读:
    pdo连接的时候设置字符编码是这样的
    mysql8.0+修改用户密码
    mysql账户添加远程访问
    php中的动态变量的一个应用
    redis scan迭代模糊匹配
    限制用户频繁提交
    js判断checkbox是否选中
    mysql 分组取每个组的前几名的问题
    Yii框架和Vue的完美结合构建前后端分离项目
    JS发送跨域Post请求出现两次请求的解决办法
  • 原文地址:https://www.cnblogs.com/chenxiaochan/p/7253428.html
Copyright © 2020-2023  润新知