美文网首页
高级映射-一对多查询

高级映射-一对多查询

作者: 咸鱼有梦想呀 | 来源:发表于2019-02-28 13:18 被阅读0次

    1.需求
    查询订单及订单明细的信息。

    2.思路
    使用resultType将上边的 查询结果映射到pojo中,订单信息的就是重复。
    orders.java类中添加List<orderDetail> orderDetails属性。
    最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。
    映射成的orders记录数为两条(orders信息不重复)
    每个orders中的orderDetails属性存储了该 订单所对应的订单明细。

    1. orders.java类中添加List<OrderdetailBean>OrderdetailBean属性,并生成get和set方法

    2. OrdersMapperCustom.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="dao.OrdersMapperCustom">
        <!--订单查询关联用户的resultMap-->
        <resultMap id="OrdersUserResultMap" type="entity.OrdersBean">
            <!--配置映射的订单信息-->
            <id column="id" property="id"></id>
            <result column="user_id" property="user_id"></result>
            <result column="number" property="number"></result>
            <result column="createtime" property="createtime"></result>
            <result column="note" property="note"></result>
            <!--配置映射的关联的用户信息-->
            <!--association:用于映射关联查询单个对象的信息
            property:要将关联查询的用户信息映射到Orders中哪个属性-->
            <association property="userBean" javaType="entity.UserBean">
                <!--id:关联查询用户的唯一标识
                column:指定唯一标识用户信息的列
                javaType:映射到user的那个属性-->
                <id column="user_id" property="id"></id>
                <result column="username" property="username"></result>
                <result column="sex" property="sex"></result>
                <result column="address" property="address"></result>
            </association>
        </resultMap>
        <!--查询订单关联用户及订单明细,使用resultMap-->
        <resultMap id="OrdersAndOrderdetailResultMap" type="entity.OrdersBean" extends="OrdersUserResultMap">
            <!--订单信息-->
            <!--用户信息-->
    
    
            <!--明细信息
            一个订单关联查询出多条明细,要使用collection进行映射
            collection:对关联查询到的多条记录映射到集合对象
            property:将关联查询到的多条记录映射到OrdersBean属性
            ofType:指定映射到集合属性的poio的类型
            -->
            <collection property="orderdetailBeans" ofType="entity.OrderdetailBean">
                <!--id:订单明细唯一标识-->
                <id column="orderdetail_id" property="id"></id>
                <result column="items_id" property="orders_id"></result>
                <result column="items_id" property="items_id"></result>
                <result column="orders_id" property="orders_id"></result>
            </collection>
        </resultMap>
        <!--查询订单关联查询用户信息,使用resultType-->
        <select id="findOrdersUser" resultType="pojo.OrdersCustom">
        SELECT orders.*,user.username,user.sex,user.address FROM user,orders WHERE orders.user_id = user.id
    </select>
        <!--查询订单关联查询用户信息,使用resultMap-->
        <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
        SELECT orders.*,user.username,user.sex,user.address FROM user,orders WHERE orders.user_id = user.id
    </select>
        <!--查询订单关联用户及订单明细,使用resultMap-->
        <select id="findOrdersAndOrderdetailResultMap" resultMap="OrdersAndOrderdetailResultMap">
        SELECT
         orders.*,
         user.username,
         user.sex,
         user.address,
         orderdetail.id orderdetail_id,
         orderdetail.items_id,
         orderdetail.item_num,
         orderdetail.orders_id
        FROM
         orders,
         USER,
         orderdetail
        WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
        </select>
    </mapper>
    
    1. OrdersMapperCustom.java接口
    public List<OrdersBean> findOrdersAndOrderdetailResultMap() throws Exception;
    
    1. OrdersMapperTest.java 测试
    @Test
        public void findOrdersAndOrderdetailResultMap() throws Exception {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
            List<OrdersBean> ordersBeans = ordersMapperCustom.findOrdersAndOrderdetailResultMap();
            System.out.println(ordersBeans);
        }
    
    运行结果

    相关文章

      网友评论

          本文标题:高级映射-一对多查询

          本文链接:https://www.haomeiwen.com/subject/dsehuqtx.html