上一篇文章分享了Mybatis与Spring的集成。本片文章将分享mybatis的关联关系映射。
本次内容将通过案例讲解
一对多:就类似于我们在tb买东西,一次性卖了很多东西,一个订单有很多的订单项。
1、首先我们通过逆向生成工具 生成我们将要用到的内容。生成上图两张表。
2、建立对应的对象视图。
OrderVo
- package com.zhw.model.vo;
-
- import com.zhw.model.Order;
- import com.zhw.model.OrderItem;
-
- import java.util.List;
-
- /**
- * @author louis
- * @create 2022-08-15 18:25
- *
- * 不仅仅包含当前表的信息,还能包含相关联的表的信息。
- */
- public class OrderVo extends Order {
- // 通过订单号查询本次订单的详细信息以及对应的所有订单项信息
- private List
orderItems; -
- public List
getOrderItems() { - return orderItems;
- }
-
- public void setOrderItems(List
orderItems) { - this.orderItems = orderItems;
- }
- }
OrderItemVo
- package com.zhw.model.vo;
-
- import com.zhw.model.Order;
- import com.zhw.model.OrderItem;
- import lombok.Data;
-
- /**
- * @author louis
- * @create 2022-08-15 18:25
- */
- @Data
- public class OrderItemVo extends OrderItem {
- private Order order;
-
- public Order getOrder() {
- return order;
- }
-
- public void setOrder(Order order) {
- this.order = order;
- }
- }
3、配置对应的xml文件
- <resultMap id="OrderVoMap" type="com.zhw.model.vo.OrderVo">
- <result column="order_id" property="orderId">result>
- <result column="order_no" property="orderNo">result>
- <collection property="orderItems" ofType="com.zhw.model.OrderItem">
- <result column="order_item_id" property="orderItemId">result>
- <result column="product_id" property="productId">result>
- <result column="quantity" property="quantity">result>
- <result column="oid" property="oid">result>
- collection>
- resultMap>

- <resultMap id="OrderItemVoMap" type="com.zhw.model.vo.OrderItemVo">
- <result column="order_item_id" property="orderItemId">result>
- <result column="product_id" property="productId">result>
- <result column="quantity" property="quantity">result>
- <result column="oid" property="oid">result>
- <association property="order" javaType="com.zhw.model.Order">
- <result column="order_id" property="orderId">result>
- <result column="order_no" property="orderNo">result>
- association>
- resultMap>

写注解
OrderBizImpl
- package com.zhw.biz.impl;
-
- import com.zhw.biz.OrderBiz;
- import com.zhw.mapper.OrderMapper;
- import com.zhw.model.Order;
- import com.zhw.model.vo.OrderVo;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- /**
- * @author louis
- * @create 2022-08-15 19:18
- */
- @Service
- public class OrderBizImpl implements OrderBiz {
-
- @Autowired
- private OrderMapper orderMapper;
- @Override
-
- @Override
- public OrderVo queryOrderVoByOrderId(Integer orderId) {
- return orderMapper.queryOrderVoByOrderId(orderId);
- }
-
-
- }
OrderItemBizImpl
- package com.zhw.biz.impl;
-
- import com.zhw.biz.OrderItemBiz;
- import com.zhw.mapper.OrderItemMapper;
- import com.zhw.model.OrderItem;
- import com.zhw.model.vo.OrderItemVo;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- /**
- * @author louis
- * @create 2022-08-15 20:06
- */
- @Service
- public class OrderItemBizImpl implements OrderItemBiz {
- @Autowired
- private OrderItemMapper orderItemMapper;
-
-
- @Override
- public OrderItemVo queryOrderItemVoByOrderItemId(Integer orderItemId) {
- return orderItemMapper.queryOrderItemVoByOrderItemId(orderItemId);
- }
-
-
- }
测试类
OrderBizImplTest
- package com.zhw.biz.impl;
-
- import com.zhw.biz.OrderBiz;
- import com.zhw.model.vo.OrderVo;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- /**
- * @author louis
- * @create 2022-08-15 19:41
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
- public class OrderBizImplTest {
- @Autowired
- private OrderBiz orderBiz;
-
- @Test
- public void queryOrderVoByOrderId() {
- OrderVo orderVo = orderBiz.queryOrderVoByOrderId(9);
- System.out.println(orderVo);
- }
- }
效果展示

OrderItemBizImplTest
- package com.zhw.biz.impl;
-
- import com.zhw.biz.OrderItemBiz;
- import com.zhw.model.vo.OrderItemVo;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- /**
- * @author louis
- * @create 2022-08-15 20:11
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
- public class OrderItemBizImplTest {
- @Autowired
- private OrderItemBiz orderItemBiz;
-
- @Test
- public void queryOrderItemVoByOrderItemId() {
- OrderItemVo orderItemVo = orderItemBiz.queryOrderItemVoByOrderItemId(43);
- System.out.println(orderItemVo);
- System.out.println(orderItemVo.getOrder());
- }
- }
效果展示
多对多相当于两个一对多
多对多:相当于书籍分类,一本书可以属于多个分类,一个分类里面可以有多本书。
- <resultMap id="HbookVoMap" type="com.zhw.model.vo.HbookVo">
- <result property="bookId" column="book_id">result>
- <result property="bookName" column="book_name">result>
- <collection property="categories" ofType="com.zhw.model.Category">
- <result property="categoryId" column="category_id">result>
- <result property="categoryName" column="category_name">result>
- collection>
- resultMap>
-
- <resultMap id="CategoryVoMap" type="com.zhw.model.vo.CategoryVo">
- <result property="categoryId" column="category_id">result>
- <result property="categoryName" column="category_name">result>
- <collection property="hbooks" ofType="com.zhw.model.Hbook">
- <result property="bookId" column="book_id">result>
- <result property="bookName" column="book_name">result>
- collection>
- resultMap>
-
- <select id="queryByBookId" 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 = #{bookId}
- 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>
HbookCategoryBizImpl
- package com.zhw.biz.impl;
-
- import com.zhw.biz.HbookCategoryBiz;
- import com.zhw.mapper.HbookCategoryMapper;
- import com.zhw.model.HbookCategory;
- import com.zhw.model.vo.CategoryVo;
- import com.zhw.model.vo.HbookVo;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- /**
- * @author louis
- * @create 2022-08-15 20:30
- */
- @Service
- public class HbookCategoryBizImpl implements HbookCategoryBiz {
- @Autowired
- private HbookCategoryMapper hbookCategoryMapper;
-
-
-
- @Override
- public CategoryVo queryByCid(Integer cid) {
- return hbookCategoryMapper.queryByCid(cid);
- }
-
- @Override
- public HbookVo queryByBookId(Integer bookId) {
- return hbookCategoryMapper.queryByBookId(bookId);
- }
- }
HbookCategoryBizImplTest
- package com.zhw.biz.impl;
-
- import com.zhw.biz.HbookCategoryBiz;
- import com.zhw.model.vo.CategoryVo;
- import com.zhw.model.vo.HbookVo;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- /**
- * @author louis
- * @create 2022-08-15 20:33
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
- public class HbookCategoryBizImplTest {
- @Autowired
- private HbookCategoryBiz hbookCategoryBiz;
-
- @Test
- public void queryByCid() {
- CategoryVo categoryVo = hbookCategoryBiz.queryByCid(8);
- System.out.println(categoryVo);
- categoryVo.getHbooks().forEach(System.out::println);
- }
-
- @Test
- public void queryByBookId() {
- HbookVo hbookVo = hbookCategoryBiz.queryByBookId(8);
- System.out.println(hbookVo);
- hbookVo.getCategories().forEach(System.out::println);
- }
- }
效果展示
