一、mybatis中的关联关系
我们需要注意的关联关系主要有两种,一对多、多对多,其中,多对多可以认为是两个一对多从而在编码时,我们只需要学会一对多,便可完成多对多的关系映射。
二、一对多关联关系配置
例如订单(Order)和订单项(OrderItem)
首先,目的是在查询order时,查询出相关联的orderitem,所以需要建立OrderVo和OrderItemVo来接收相应的值,可以在原有的类上进行属性增加,但是会破坏其与数据库的对应关系。
1、代码生成插件生成相关代码(使用上面的例子)
2、在OrderMapper.xml中(一对多)
<resultMap id="OrderVoMap" type="com.csf.vo.OrderVo" >
<result property="orderId" column="order_id"></result>
<result property="orderNo" column="order_no"></result>
<collection property="orderItems" ofType="com.csf.model.OrderItem">
<result property="orderItemId" column="order_item_id"></result>
<result property="oid" column="oid"></result>
<result property="productId" column="product_id"></result>
<result property="quantity" column="quantity"></result>
</collection>
</resultMap>
<select id="queryOrderVoByOrderId" resultMap="OrderVoMap" parameterType="java.lang.Integer">
select * from t_hibernate_order o,t_hibernate_order_item oi
where o.order_id = oi.oid
and o.order_id = #{orderId}
</select>
result定义出查询到的结果类型,以便接收,下面这个查询方法是连表查询,也就是我们需要的能查出相关联的数据,然后在外部直接调用这个方法就可以
3.在OrderItemMapper.xml中(多对一)
<resultMap id="OrderVoMap" type="com.javaxl.csf.vo.OrderItemVo" >
<result property="orderItemId" column="order_item_id"></result>
<result property="oid" column="oid"></result>
<result property="productId" column="product_id"></result>
<result property="quantity" column="quantity"></result>
<association property="order" javaType="com.csf.model.Order">
<result property="orderId" column="order_id"></result>
<result property="orderNo" column="order_no"></result>
</association>
</resultMap>
<select id="queryOrderItemVoByOrderItemId" resultMap="OrderVoMap" parameterType="java.lang.Integer">
select * from t_hibernate_order o,t_hibernate_order_item oi
where o.order_id = oi.oid
and oi.order_item_id = #{orderItemId}
</select>
三、多对多的关联关系配置
在每一个实体类映射中,都将自己作为一方,配置collection标签即可。