需求:查询用户订单信息,详细表和实体信息查看上一篇博客(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();
}
}