resultType就是把查询结果封装到pojo类型中,pojo类的属性名和数据库所对应表的字段名一致。若查询的字段和pojo的属性不一致,需要用到property属性手动配置。
例子:
DB: order表
POJO:
// 与DB表中字段一致
private int id;
// userId字段不一致,请参照下面<result property="userId" column="user_id" />
private Integer userId;
...
Mapper.xml文件:
配置resultMap标签,映射表字段和pojo属性名
<!-- resultMap:填入配置的resultMap标签的id值 -->
<select id="selectAll" resultMap="selectResultMap">
SELECT
id,
user_id
FROM `order`
</select>
<!-- type就是指定映射到哪一个pojo -->
<!-- id:设置ResultMap的id -->
<resultMap type="order" id="selectResultMap">
<!-- 定义主键:如果是多个字段,则定义多个id -->
<id property="id" column="id" />
<!-- property:pojo中的属性名 -->
<!-- column: 表中的列名 -->
<!-- 定义普通属性 -->
<result property="userId" column="user_id" />
</resultMap>
使用resultMap进行关联查询
一对一查询:一个订单只能对应一个用户。
一个订单信息只能是一个人下的订单,从查询订单信息角度出发关联查询用户信息为一对一查询。反之,从用户信息角度出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。
POJO:
// 与DB表中字段一致
private int id;
// userId字段不一致,请参照下面<result property="userId" column="user_id" />
private Integer userId;
// 关联User表
private User user;
...
Mapper.xml文件:
先使用id和result标签,映射order类的结果集,然后再使用association标签关联对象User的结果集
<!-- 一对一关联,查询订单,订单内部包含用户属性 -->
<select id="selectAll" resultMap="selectResultMap">
SELECT
o.id,
o.user_id,
u.username,
u.address
FROM
`order` o
LEFT JOIN `user` u ON o.user_id = u.id
</select>
<resultMap type="order" id="selectResultMap">
<id property="id" column="id" />
<result property="userId" column="user_id" />
<!-- association :配置一对一属性 -->
<!-- property:order里面的User属性名 -->
<!-- javaType:属性类型 -->
<association property="user" javaType="user">
<!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
<id property="id" column="user_id" />
<result property="username" column="username" />
<result property="address" column="address" />
</association>
</resultMap>
一对多查询:查询所有用户信息及相关订单。
POJO:
// User类
private int id;
private String username;
private String address;
// 关联订单表,一对多关系
private List<Order> orders;
...
Mapper.xml文件:
先使用id和result配置映射User类的结果,然后使用collection标签配置Order结果
<!-- 一对多关联,时查询该用户下的订单 -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
SELECT
u.id,
u.username,
u.address,
o.id oid,
o.user_id
FROM
`user` u
LEFT
JOIN `order` o
ON
u.id = o.user_id
</select>
<resultMap type="user" id="userOrderResultMap">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="address" column="address" />
<!-- 配置一对多的关系
property:填写pojo类中集合类类属性的名称
javaType:填写集合类型的名称
-->
<collection property="orders" javaType="list" ofType="order">
<!-- 配置主键,是关联Order的唯一标识 -->
<id property="id" column="id" />
<result property="userId" column="user_id" />
</collection>
</resultMap>