1 一对一映射
使用resultMap映射的方式:
<!-- 一对一映射 -->
<!-- 订单关联查询的resultMap
将整个结果映射到com.shi.POJO的Orders中
-->
<resultMap type="com.shi.POJO.Orders" id="ordersUserResultMap">
<!-- 配置映射的订单信息 -->
<!-- id:指定查询列中的唯一标识,订单信息中的唯一标识,如果有多个列组成唯一标识,配置多个id
column:指定查询列中的唯一标识,如果有多个列组成唯一标识,配置多个id
property:订单信息的唯一标识 ,列所映射到orders中哪个属性
-->
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 配置映射的关联的用户信息 -->
<!-- association:用于映射关联查询单个对象的信息
propety: 要将关联查选的用户信息映射到Orders中哪个属性 -->
<association property="user" javaType="com.shi.POJO.User">
<!-- id :关联查询用户的唯一标识
column:指定唯一标识用户信息的列
property:映射到user的哪个属性 -->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="findOrderCastomResultMap" resultMap="ordersUserResultMap">
SELECT orders.*,user.username,user.sex,user.birthday FROM orders,USER WHERE
orders.user_id=user.id
</select>
对resultType 和 resultMap 的总结:
使用resultMap实现一对多映射:
<!-- ================一对多映射================ -->
<!-- 一对多映射查询 查询订单 ,用户信息 及订单明细表
-->
<!-- rusultMap配置 注意:如果上面有重复的东西 可以使用 extends="" -->
<resultMap type="com.shi.POJO.Orders" id="OrdersAndOrderDetailResultMap" >
<!-- 订单信息 -->
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 用户信息 -->
<association property="user" javaType="com.shi.POJO.User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
<!-- 订单明细信息 -->
<!--
一个订单关联查询出来了多条明细,所以要使用collection进行映射
collection:对查询到多条记录映射到集合对象中去
property:将关联查询到的多条记录映射到该orderdetailList属性中去
ofType:指定映射到list集合属性中pojo的类型
-->
<collection property="orderdetailList" ofType="com.shi.POJO.Orderdetail">
<!-- id:订单明细表的唯一标识
property:要将订单明细的唯一标识映射到com.shi.POJO.Orderdetail 的哪个属性 -->
<id column="orderdetail_id" property="id"/>
<result column="items_id" property="items_id"/>
<result column="orders_id" property="orders_id"/>
<result column="items_num" property="items_num"/>
</collection>
</resultMap>
<!-- sql语句 -->
<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
SELECT
orders.*,
user.username,
user.sex,
user.address,
orderdetail.id orderdetail_id, <!-- 注意:这里需要collection中的id 所以 不能和上面属性冲突 -->
orderdetail.items_id,
orderdetail.orders_id,
orderdetail.items_num
FROM
orders,
USER,
orderdetail
WHERE
orders.user_id=user.id AND orderdetail.orders_id=orders.id
</select>
对resultType 和 resultMap的总结:(一对多建议使用 resultMap)
映射思路:
<!-- =================多对多查询=============== -->
<!-- 现在执行多对多查询 查询用户信息和商品信息 进行关联-->
<!-- resultMap映射 -->
<resultMap type="com.shi.POJO.User" id="UserAndItemsReusltMap">
<!-- 对用户信息进行映射 -->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
<!-- 对订单进行映射 ######一对多映射######-->
<collection property="orders" ofType="com.shi.POJO.Orders">
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 对订单细节进行映射 ######一对多映射######-->
<collection property="orderdetailList" ofType="com.shi.POJO.Orderdetail">
<id column="" property=""/>
<result column="orderdetail_id" property="id"/>
<result column="orders_id" property="orders_id"/>
<result column="items_id" property="items_id"/>
<result column="items_num" property="items_num"/>
<!-- 对商品表进行映射 ######一对一映射###### -->
<association property="items" javaType="com.shi.POJO.Items">
<id column="items_id" property="id"/>
<result column="items_name" property="name"/>
<result column="items_price" property="price"/>
</association>
</collection>
</collection>
</resultMap>
<!-- sql语句 -->
<select id="findUserAndItemsReusltMap" resultMap="UserAndItemsReusltMap">
SELECT
orders.*,
user.username,
user.sex,
user.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.orders_id,
orderdetail.items_num,
items.name items_name,
items.price items_price
FROM
orders,
USER,
orderdetail,
items
WHERE
orders.user_id=user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id=items.id
</select>
总结: