进阶:高级映射
跳到导航
跳到搜索
关于
标签 | 说明 |
---|---|
association | 用于映射关联单个对象的信息
|
collection | 用于关联查询到多条记录映射到集合对象中
|
一对一
示例:查询所有订单信息,关联查询下单用户信息。
note:
- 订单->用户:一对一
- 用户->订单:一对多
使用resultType
使用resultType,专门的po类作为输出类型,此po类中包括了订单信息和用户信息:
OrdersCustom.java:
public class OrdersCustom extends Orders {
private String username;// 用户名称
private String address;// 用户地址
// get/set
}
UserMapper.xml:
<!-- 查询所有订单信息 -->
<select id="findOrdersList" resultType="OrdersCustom">
SELECT orders.*, user.username, user.address
FROM orders, user
WHERE orders.user_id = user.id
</select>
UserMapper.java:
public List<OrdersCustom> findOrdersList() throws Exception;
UserMapperTest.java:
Public void testfindOrdersList()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//查询订单信息
List<OrdersCustom> list = userMapper.findOrdersList();
System.out.println(list);
//关闭session
session.close();
}
使用resultMap
使用resultMap,定义专门的resultMap用于映射一对一查询结果:
- 在resultMap中使用association完成关联查询,将关联查询信息映射到pojo对象中。
Orders.java:
public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note;
//用户信息
private User user;
...
}
UserMapper.xml:
<!-- 订单信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap">
<!-- 这里的id,是mybatis在进行一对一查询时将user字段映射为user对象时要使用,必须写 -->
<id property="id" column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<!-- 使用association进行一对一关联查询 -->
<association property="user" javaType="cn.itcast.mybatis.po.User">
<!-- 这里的id为user的id,如果写上表示给user的id属性赋值 -->
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
</resultMap>
<!-- 查询所有订单信息 -->
<select id="findOrdersListResultMap" resultType="userordermap">
SELECT orders.*, user.username, user.address
FROM orders, user
WHERE orders.user_id = user.id
</select>
UserMapper.java:
public List<Orders> findOrdersListResultMap() throws Exception;
UserMapperTest.java:
Public void testfindOrdersListResultMap()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//查询订单信息
List<Orders> list = userMapper.findOrdersListResultMap();
System.out.println(list);
//关闭session
session.close();
}