zoukankan      html  css  js  c++  java
  • mybatis关联关系

    mybatis关联关系

    一对多&多对一

    这是就那订单和订单项来做演示,一个订单对应多个订单项。一个订单项对应一个订单。

    订单表 t_hibernate_order

    订单项表 t_hibernate_order_item

    首先先用逆向生成工具生成t_hibernate_order、t_hibernate_order_item
    这两张表对应的model与mapper 如何生成,可以参考之前的,所以不会过多去讲解
    实体类 OrderVo
    package com.liuwenwu.model.vo;
    
    import com.liuwenwu.model.Order;
    import com.liuwenwu.model.OrderItem;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 11:27
     */
    public class OrderVo extends Order {
        private List<OrderItem> orderItems = new ArrayList<>();
    
        public List<OrderItem> getOrderItems() {
            return orderItems;
        }
    
        public void setOrderItems(List<OrderItem> orderItems) {
            this.orderItems = orderItems;
        }
    }

    实体类  OrderItemVo

    package com.liuwenwu.model.vo;
    
    import com.liuwenwu.model.Order;
    import com.liuwenwu.model.OrderItem;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 11:30
     */
    public class OrderItemVo extends OrderItem {
        private Order order;
    
        public Order getOrder() {
            return order;
        }
    
        public void setOrder(Order order) {
            this.order = order;
        }
    }
    OrderMapper.xml(一对多)
     <resultMap id="OrderVoMap" type="com.liuwenwu.model.vo.OrderVo" >
        <result property="orderId" column="order_id"></result>
        <result property="orderNo" column="order_no"></result>
        <collection property="orderItems" ofType="com.liuwenwu.model.OrderItem">
          <result property="orderItemId" column="order_item_id"></result>
          <result property="productId" column="product_id"></result>
          <result property="quantity" column="quantity"></result>
          <result property="oid" column="oid"></result>
        </collection>
      </resultMap>
    
      <select id="selectByOid" 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 = #{oid}
      </select>

    OrderMapper.java

    package com.liuwenwu.mapper;
    
    import com.liuwenwu.model.Order;
    import com.liuwenwu.model.vo.OrderVo;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface OrderMapper {
        int deleteByPrimaryKey(Integer orderId);
    
        int insert(Order record);
    
        int insertSelective(Order record);
    
        Order selectByPrimaryKey(Integer orderId);
    
        int updateByPrimaryKeySelective(Order record);
    
        int updateByPrimaryKey(Order record);
    
        //一对多
        OrderVo selectByOid(@Param("oid") Integer oid);
    }

    OrderItemMapper.xml (多对一)

     <resultMap id="OrderItemVoMap" type="com.liuwenwu.model.vo.OrderItemVo" >
        <result property="orderItemId" column="order_item_id"></result>
        <result property="productId" column="product_id"></result>
        <result property="quantity" column="quantity"></result>
        <result property="oid" column="oid"></result>
        <association property="order" javaType="com.liuwenwu.model.Order">
          <result property="orderId" column="order_id"></result>
          <result property="orderNo" column="order_no"></result>
        </association>
      </resultMap>
    
      <select id="selectByOrderItemId" resultMap="OrderItemVoMap" 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>

    OrderItemMapper.java

    package com.liuwenwu.mapper;
    
    import com.liuwenwu.model.OrderItem;
    import com.liuwenwu.model.vo.OrderItemVo;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface OrderItemMapper {
        int deleteByPrimaryKey(Integer orderItemId);
    
        int insert(OrderItem record);
    
        int insertSelective(OrderItem record);
    
        OrderItem selectByPrimaryKey(Integer orderItemId);
    
        int updateByPrimaryKeySelective(OrderItem record);
    
        int updateByPrimaryKey(OrderItem record);
    
        OrderItemVo selectByOrderItemId(@Param("orderItemId") Integer orderItemId);
    
    }
    One2ManyService
    package com.liuwenwu.service;
    
    import com.liuwenwu.model.vo.OrderItemVo;
    import com.liuwenwu.model.vo.OrderVo;
    import org.apache.ibatis.annotations.Param;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 18:22
     */
    
    public interface One2ManyService {
    
        OrderVo selectByOid(Integer oid);
    
        OrderItemVo selectByOrderItemId(Integer orderItemId);
    
    }
    One2ManyServiceImpl
    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.mapper.OrderItemMapper;
    import com.liuwenwu.mapper.OrderMapper;
    import com.liuwenwu.model.vo.OrderItemVo;
    import com.liuwenwu.model.vo.OrderVo;
    import com.liuwenwu.service.One2ManyService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 18:24
     */
    @Service
    public class One2ManyServiceImpl implements One2ManyService {
    
        @Autowired
        private OrderMapper orderMapper;
    
        @Autowired
        private OrderItemMapper orderItemMapper;
    
        @Override
        public OrderVo selectByOid(Integer oid) {
            return orderMapper.selectByOid(oid);
        }
    
        @Override
        public OrderItemVo selectByOrderItemId(Integer orderItemId) {
            return orderItemMapper.selectByOrderItemId(orderItemId);
        }
    }

    测试  One2ManyServiceImplTest

    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.SpringBaseTest;
    import com.liuwenwu.model.OrderItem;
    import com.liuwenwu.model.vo.OrderItemVo;
    import com.liuwenwu.model.vo.OrderVo;
    import com.liuwenwu.service.One2ManyService;
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import static org.junit.Assert.*;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 18:31
     */
    public class One2ManyServiceImplTest extends SpringBaseTest {
    
        @Autowired
        private One2ManyService one2ManyService;
    
        @Test
        public void selectByOid() {
            OrderVo orderVo = one2ManyService.selectByOid(1);
            System.out.println(orderVo);
            for (OrderItem orderItem : orderVo.getOrderItems()) {
                System.out.println(orderItem);
            }
    
        }
    
        @Test
        public void selectByOrderItemId() {
            OrderItemVo orderItemVo = one2ManyService.selectByOrderItemId(1);
            System.out.println(orderItemVo);
            System.out.println(orderItemVo.getOrder());
    
        }
    }

    结果:一个订单对应多个订单项

    一个订单项对应一个订单

    
    

    多对多

    多对多这里就使用书籍和数据类别来举个例子,一本书有多个类别,一个类别对应多本书。中间通过关联表进行关联。

    书籍表t_hibernate_book

    书籍类别表 t_hibernate_category


    中间表 t_hibernate_book_category

    首先用逆向生成工具生成上面表对应的代码

    创建对应的Vo类,这里只创建数据和类被。中间表就没必要:
    HbookVo

    package com.liuwenwu.model.vo;
    
    import com.liuwenwu.model.Category;
    import com.liuwenwu.model.Hbook;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 19:02
     */
    public class HbookVo extends Hbook {
    
        private List<Category> category =new ArrayList<>();
    
        public List<Category> getCategory() {
            return category;
        }
    
        public void setCategory(List<Category> category) {
            this.category = category;
        }
    }
    CategoryVo
    package com.liuwenwu.model.vo;
    
    import com.liuwenwu.model.Category;
    import com.liuwenwu.model.Hbook;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 19:04
     */
    public class CategoryVo extends Category {
        private List<Hbook> hbooks =new ArrayList<>();
    
        public List<Hbook> getHbooks() {
            return hbooks;
        }
    
        public void setHbooks(List<Hbook> hbooks) {
            this.hbooks = hbooks;
        }
    }

    HbookCategoryMapper.xml

     <resultMap id="HbookVoMap" type="com.liuwenwu.model.vo.HbookVo" >
        <result property="bookId" column="book_id"></result>
        <result property="bookName" column="book_name"></result>
        <result property="price" column="price"></result>
        <collection property="category" ofType="com.liuwenwu.model.Category">
          <result property="categoryId" column="category_id"></result>
          <result property="categoryName" column="category_name"></result>
        </collection>
      </resultMap>
    
      <resultMap id="CategoryVoMap" type="com.liuwenwu.model.vo.CategoryVo" >
        <result property="categoryId" column="category_id"></result>
        <result property="categoryName" column="category_name"></result>
        <collection property="hbooks" ofType="com.liuwenwu.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="queryByBid" resultMap="HbookVoMap" parameterType="java.lang.Integer">
        select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
         where b.book_id = bc.bid and bc.cid = c.category_id and b.book_id = #{bid}
    
      </select>
      <select id="queryByCid" resultMap="CategoryVoMap" parameterType="java.lang.Integer">
        select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
         where b.book_id = bc.bid and bc.cid = c.category_id and c.category_id=#{cid}
      </select>
    HbookCategoryMapper
    package com.liuwenwu.mapper;
    
    import com.liuwenwu.model.HbookCategory;
    import com.liuwenwu.model.vo.CategoryVo;
    import com.liuwenwu.model.vo.HbookVo;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface HbookCategoryMapper {
        int deleteByPrimaryKey(Integer bcid);
    
        int insert(HbookCategory record);
    
        int insertSelective(HbookCategory record);
    
        HbookCategory selectByPrimaryKey(Integer bcid);
    
        int updateByPrimaryKeySelective(HbookCategory record);
    
        int updateByPrimaryKey(HbookCategory record);
    
        HbookVo queryByBid(@Param("bid") Integer bid);
    
        CategoryVo queryByCid(@Param("cid") Integer cid);
    }
    HbookCategoryService
    package com.liuwenwu.service;
    
    import com.liuwenwu.model.vo.CategoryVo;
    import com.liuwenwu.model.vo.HbookVo;
    import org.apache.ibatis.annotations.Param;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 19:26
     */
    
    public interface HbookCategoryService {
    
        HbookVo queryByBid(Integer bid);
    
        CategoryVo queryByCid(Integer cid);
    }
    HbookCategoryServiceImpl
    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.mapper.HbookCategoryMapper;
    import com.liuwenwu.model.vo.CategoryVo;
    import com.liuwenwu.model.vo.HbookVo;
    import com.liuwenwu.service.HbookCategoryService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 19:27
     */
    @Service
    public class HbookCategoryServiceImpl implements HbookCategoryService {
    
        @Autowired
        private HbookCategoryMapper hbookCategoryMapper;
    
        @Override
        public HbookVo queryByBid(Integer bid) {
            return hbookCategoryMapper.queryByBid(bid);
        }
    
        @Override
        public CategoryVo queryByCid(Integer cid) {
            return hbookCategoryMapper.queryByCid(cid);
        }
    }
    测试:HbookCategoryServiceImplTest
    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.SpringBaseTest;
    import com.liuwenwu.model.Category;
    import com.liuwenwu.model.Hbook;
    import com.liuwenwu.model.vo.CategoryVo;
    import com.liuwenwu.model.vo.HbookVo;
    import com.liuwenwu.service.HbookCategoryService;
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import static org.junit.Assert.*;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-26 19:29
     */
    public class HbookCategoryServiceImplTest extends SpringBaseTest {
    
        @Autowired
        private HbookCategoryService hbookCategoryService;
    
        @Test
        public void queryByBid() {
            HbookVo hbookVo = hbookCategoryService.queryByBid(1);
            System.out.println(hbookVo);
            for (Category category : hbookVo.getCategory()) {
                System.out.println(category);
            }
    
        }
    
        @Test
        public void queryByCid() {
            CategoryVo categoryVo = hbookCategoryService.queryByCid(1);
            System.out.println(categoryVo);
            for (Hbook hbook : categoryVo.getHbooks()) {
                System.out.println(hbook);
            }
        }
    }

    结果 :一本书对应多个书籍类别

    一个书籍类别对应多本书

  • 相关阅读:
    CodeBlocks 中fopen函数不支持命令 “r”
    【转载】分享一些Qt学习资源,欢迎下载
    【转载】知乎答案----孙志岗----Google 发布了程序员养成指南,国内互联网巨头是否也有类似的指南和课程推荐
    【转载】谷歌公司推荐的程序员必修课(英文教程)
    【转载】张逸--ThoughtWorks(中国)程序员读书雷达
    在windows环境下,为什么要用Notepad++编辑?
    【转载】池建强--趣谈个人建站
    JAVA入门第二季 第一章 类和对象
    CAP理论总结
    分布式通信方式之消息队列之RocketMQ
  • 原文地址:https://www.cnblogs.com/liuwenwu9527/p/11594210.html
Copyright © 2011-2022 走看看