mybatis 关联关系映射(一对多 ,多对多)

一对多 ,用order订单表,orderItem订单项 来举例

1.将数据表导入数据库中

2.通过mybatis-generator插件生成mapper、model

   1)配置mybatis-generator插件生成文件位置
   2)修改generatorConfig.xml配置文件的生成目录(mapper和model)及对应生成关系

3.修改Order,OrderItem实体类,建立实体映射关联关系(一对多、多对一)
   #一对多:一个订单对应多个订单项

   private List<OrderItem> orderItems=new ArrayList<>();

 #一对一:一个订单项对应一个订单

    private Order order;

   

4.配置mybatis关联映射 

      OrderMapper.xml

 <!-- 一对多的关系 -->

   <resultMap id="orderMap" type="com.zking.ssm.model.Order">
   <result property="orderId" column="order_id"></result>
   <result property="orderNo" column="order_no"></result>
 <collection property="orderItems" ofType="com.zking.ssm.model.OrderItem">
   <result property="oid" column="oid"></result>
   <result property="orderItemId" column="order_item_id"></result>
   <result property="productId" column="product_id"></result>
   <result property="quantity" column="quantity"></result>
</collection>
 </resultMap>



<!-- order一对多orderItem-->
  <select id="querySingleOrder" resultMap="orderMap" 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>

<!-- 一对一的关系 -->

  OrderItemMapper.xml

<resultMap id="orderItemMap" type="com.zking.ssm.model.OrderItem">
    <result property="oid" column="oid"></result>
    <result property="orderItemId" column="order_item_id"></result>
    <result property="productId" column="product_id"></result>
    <result property="quantity" column="quantity"></result>
  <association property="order"  javaType="com.zking.ssm.model.Order">
    <result property="orderId" column="order_id"></result>
    <result property="orderNo" column="order_no"></result>
  </association>
  </resultMap>

  

<!--多对一-->
<select id="querySingleOrderItem" resultMap="orderItemMap" 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>

5.   创建OrderServer    OrderServerImpl       OrdreItemServer    OrdreItemServerImpl 

测试   

一对多 

package com.zking.ssm.service.impl;

import com.zking.SpringJunitBaseTest;
import com.zking.ssm.model.Order;
import com.zking.ssm.service.OrderServer;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;


import static org.junit.Assert.*;

/**
 * @author HYT
 * @site
 * @company
 * @create  2018-12-21 11:06
 */

public class OrderServerImplTest extends SpringJunitBaseTest {
    @Autowired
    private OrderServer orderServer;

    @Test
    public void querySingleOrder() {
        Order order = this.orderServer.querySingleOrder(1);
        System.out.println(order);

    }
}

结果:

一对一

package com.zking.ssm.service.impl;

import com.zking.SpringJunitBaseTest;
import com.zking.ssm.model.OrderItem;
import com.zking.ssm.service.OrderItemServer;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import static org.junit.Assert.*;

/**
 * @author HYT
 * @site
 * @company
 * @create  2018-12-21 11:51
 */
public class OrderItemServerImplTest extends SpringJunitBaseTest {

    @Autowired
     private OrderItemServer orderItemServer;
    @Test
    public void querySingleOrderItem() {
        OrderItem orderItem = this.orderItemServer.querySingleOrderItem(1);
        System.out.println(orderItem);
    }
}

运行结果:

多对多, 用hbook书籍表,category书籍类别表 以及中间表bookcategory来举例

一本书对应多个类别,一个类别对应多本书

前面步骤一样

主要是配置 HbookMapper.xml 以及CategoryMapper.xml

<resultMap id="HbookMap" type="com.zking.ssm.model.HBook">
   <result property="bookId" column="book_id"></result>
   <result property="bookName" column="book_name"></result>
   <result property="price" column="price"></result>
 <collection property="categories" ofType="com.zking.ssm.model.Category">
    <result property="categoryId" column="category_id"></result>
    <result property="categoryName" column="category_name"></result>
 </collection>
</resultMap>



<!--多对多-->
<select id="querySingHbook" resultMap="HbookMap" parameterType="java.lang.Integer" >
 select *
  from t_hibernate_book b,t_hibernate_category c,t_hibernate_book_category bc
  where b.book_id=bc.bid and bc.cid=c.category_id and b.book_id=#{bookId}

</select>
  <resultMap id="CategoryMap" type="com.zking.ssm.model.Category">
    <result property="categoryId" column="category_id"></result>
    <result property="categoryName" column="category_name"></result>
    <collection property="hBooks" ofType="com.zking.ssm.model.HBook">
        <result property="bookId" column="book_id"></result>
      <result property="bookName" column="book_name"></result>
      <result property="price" column="price"></result>
    </collection>
  </resultMap>





  <!--多对多-->
  <select id="querySingCategory" resultMap="CategoryMap" parameterType="java.lang.Integer" >
   select *
    from t_hibernate_book b,t_hibernate_category c,t_hibernate_book_category bc
    where b.book_id=bc.bid and bc.cid=c.category_id and c.category_id=#{categoryId}

  </select>

之后测试也是一样一样的 ,可以得到想要的结果

猜你喜欢

转载自blog.csdn.net/Soul717/article/details/85163806
今日推荐