mybatis一对多查询

需求:查询用户订单信息,详细表和实体信息查看上一篇博客(https://blog.csdn.net/hyrzzh/article/details/90370793)。

使用resultMap实现一对多查询

创建结果集映射类

UserCustomer.java

package com.cloud.mybaits.pojo;

import java.util.List;

/**
 * author:zh
 * created time:2019/05/20
 */
public class UserCustomer extends User {

//    订单信息
    List<Orders> orders;

    public List<Orders> getOrders() {
        return orders;
    }

    public void setOrders(List<Orders> orders) {
        this.orders = orders;
    }
}

编写UserMapper接口

package com.cloud.mybaits.mapper;

import com.cloud.mybaits.pojo.User;
import com.cloud.mybaits.pojo.UserCustomer;

import java.util.List;

/**
 * author:zh
 * created time:2019/05/17
 */
public interface UserMapper {

    List<UserCustomer> findUserOrder();

}

编写UserMapper.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="com.cloud.mybaits.mapper.UserMapper">
    <resultMap id="userOrdersResultMap" type="com.cloud.mybaits.pojo.UserCustomer">
        <id column="userId" property="id"/>
        <result column="username" property="username"/>
        <result column="address" property="address"/>
        <collection property="orders" ofType="com.cloud.mybaits.pojo.Orders">
            <id column="orderId" property="id"/>
            <result column="number" property="number"/>
        </collection>
    </resultMap>
<!--一条查询语句中不能出现重复的字段名,所以我用了别名-->
    <sql id="BASE_SELECT_LIST">
        user.id as userId,username,address,orders.id as orderId,orders.number as number
    </sql>
    <select id="findUserOrder" resultMap="userOrdersResultMap">
        select <include refid="BASE_SELECT_LIST"/>
        from user,orders where user.id=orders.user_id;
    </select>

</mapper>

编写测试方法

package com.cloud.mybaits.mapper;

import com.cloud.mybaits.pojo.Orders;
import com.cloud.mybaits.pojo.OrdersCustomer;
import com.cloud.mybaits.pojo.UserCustomer;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import static org.junit.Assert.*;

/**
 * author:zh
 * created time:2019/05/18
 */
public class OrdersMapperTest {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void before() throws IOException {
        String resurce="mybatis-config.xml";
        InputStream inputStream=Resources.getResourceAsStream(resurce);
        sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    }

//    查询用户订单信息

    @Test
    public void findUserOrder(){
        SqlSession session=sqlSessionFactory.openSession();
        UserMapper userMapper=session.getMapper(UserMapper.class);
        List<UserCustomer> userOrder = userMapper.findUserOrder();
        for (UserCustomer userCustomer : userOrder) {
            System.out.print(userCustomer.toString());
            for (Orders orders : userCustomer.getOrders()) {
                System.out.print(",订单号:"+orders.getNumber());
            }
            System.out.println();
        }
        session.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值