Mybatis中一对多的关联查询
问题:
一个user中有多个订单order。
改造user的pojo
public class User {
private Integer id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
private List<Order> orders;
// .....
}
编写user的映射文件
<resultMap type="user" id="user_order_map">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="address" column="address" />
<result property="birthday" column="birthday" />
<result property="sex" column="sex" />
<!-- collection用于配置一对多关联
property: User当中Order的属性
ofType: orders的数据类型,支持别名
-->
<collection property="orders" ofType="com.itheima.mybatis.pojo.Order">
<!-- <id>用于映射主键 -->
<id property="id" column="oid"/>
<!-- 普通字段用<result>映射 -->
<result property="userId" column="id"/>
<result property="number" column="number"/>
<result property="createtime" column="createtime"/>
<result property="note" column="note"/>
</collection>
</resultMap>
<select id="getUserOrderMap" resultMap="user_order_map">
SELECT
u.`id`,
u.`username`,
u.`birthday`,
u.`sex`,
u.`address`,
u.`uuid2`,
o.`id` oid,
o.`number`,
o.`createtime`,
o.`note`
FROM
`user` u
LEFT JOIN `order` o
ON o.`user_id` = u.`id`
</select>
测试程序:
@Test
public void testGetUserOrderMap() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
//获取接口的代理实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.getUserOrderMap();
for (User user2 : list) {
System.out.println(user2);
for (Order order : user2.getOrders()) {
if(order.getId() != null){
System.out.println(" 此用户下的订单有:" + order);
}
}
}
sqlSession.close();
}