环境搭建参考:MyBatis表关联—-一对一
一对多 |
应用场景:首先根据用户 ID 读取一个用户信息,然后再读取这个用户所拥有的订单(orders)。
在User类中添加一个orders的集合:
private List<Orders> orders;
public List<Orders> getOrders() {
return orders;
}
public void setOrders(List<Orders> orders) {
this.orders = orders;
}
mapper.xml:
<resultMap type="user" id="ordersMap">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday"/>
<!-- collection标签用于配置一对多 -->
<collection property="orders" javaType="list" ofType="orders">
<id property="id" column="oid"/>
<result column="userId" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
</collection>
</resultMap>
<!-- 查询某一id的user及他的所有订单 -->
<select id="queryUserOrdersById" parameterType="int" resultMap="ordersMap">
SELECT
u.*,
o.id oid,
o.number,
o.createtime
FROM
USER u
LEFT JOIN orders o ON o.userId = u.id
WHERE u.id=#{id}
</select>
测试:
public void TestQueryUserOrdersById(){
SqlSession session = sqlSessionFactory.openSession();
OrdersMapper mapper = session.getMapper(OrdersMapper.class);
List<User> userList = mapper.queryUserOrdersById(1);
for (User user : userList) {
System.out.println(user);
}
session.commit();
session.close();
}