resultType 能够把查问的后果封装在 pojo 中,但 pojo 类的属性名和查问到的数据库表的字段名统一。
如果 sql 查问到的字段与 pojo 的属性名不统一,则须要应用 resultMap 将字段名和属性名对应起来,进行手动配置封装,将后果映射到 pojo 中
<!-- resultMap 最终还是要将后果映射到 pojo 上,type 就是指定映射到哪一个 pojo -->
<!-- id:设置 ResultMap 的 id -->
<resultMap type="order" id="orderResultMap">
<!-- 定义主键 , 十分重要。如果是多个字段, 则定义多个 id -->
<!-- property:主键在 pojo 中的属性名 -->
<!-- column:主键在数据库中的列名 -->
<id property="id" column="id" />
<!-- 定义一般属性 -->
<result property="userId" column="user_id" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
</resultMap>
resultMap 中 association 一对一的关系
一对一数据模型:订单用户
一个订单信息只会是一个人下的订单,所以从查问订单信息登程关联查问用户信息为一对一查问。如果从用户信息登程查问用户下的订单信息则为一对多查问,因为一个用户能够下多个订单。
革新 pojo 类
在订单类(order)中增加 User 属性,User 属性是一个援用类型,用于存储关联查问的用户信息,因为关联关系是一对一,所以只须要增加单个属性即可
<resultMap type="order" id="orderUserResultMap">
<id property="id" column="id" />
<result property="userId" column="user_id" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
<!-- 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>
<!-- 一对一关联,查问订单,订单外部蕴含用户属性 -->
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
SELECT o.id, o.user_id, o.number, o.createtime,o.note,
u.username,u.address
FROM
`order` o LEFT JOIN `user` u
ON o.user_id = u.id
</select>
resultMap 中 collection 一对多和多对多关系
批改 pojo 类,在 pojo 类增加订单汇合属性
一个用户对应这多个订单
<resultMap type="user" id="userOrderResultMap">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="birthday" column="birthday" />
<result property="sex" column="sex" />
<result property="address" column="address" />
<!-- 配置一对多的关系
property:填写 pojo 类中汇合类类属性的名称
javaType:填写汇合类型的名称
-->
<collection property="orders" javaType="list" ofType="order">
<!-- 配置主键,是关联 Order 的惟一标识 -->
<id property="id" column="oid" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
</collection>
</resultMap>
<!-- 一对多关联,查问订单同时查问该用户下的订单 -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
SELECT u.id, u.username,u.birthday,u.sex,u.address,
o.id oid, o.number, o.createtime,o.note
FROM `user` u LEFT JOIN `order` o
ON u.id = o.user_id
</select>