Mybatis关联关系

1、一对多,以订单与订单项为例:

1-1:将数据导入数据库
1-2:通过mybatis-generator插件生成dao、mapper、model
1-3:实体类建立关联关系:
1-3-1、一对多,订单的实体类:一个订单对应多个订单项

private Set<OrderItem> orderItems = new HashSet<>();

1-3-2、多对一,订单项的实体类:多个订单项对应一个订单

private Order order;

1-4:配置mybatis关联映射:
1-4-1:一对多:订单中的Mapper.xml配置

<collection property= oftype=“类的全路径名”>
<!--配置,与数据库保持一致-->
<!--订单配置-->
  <resultMap id="orderMap" type="com.zking.ssm.model.Order">
    <result property="orderId" column="order_id"></result>
    <result property="orderNo" column="order_no"></result>
    <!--一对多     订单项配置-->
   <!--  property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
    <collection property="orderItems" ofType="com.zking.ssm.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>

1-4-2:多对一:订单项中的Mapper.xml配置:

<assocation property javaType = " 类的全路径名"

 <resultMap id="OrderItemMap" type="com.zking.ssm.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>
       <!-- 多对一的关系 -->
        <!-- property: 指的是属性的值, javaType:指的是属性的类型-->
    <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>
  

1-5:订单中方法的配置:
1-5-1:根据订单id去查询:

 List<Order> queryOrderById(Integer orderId);

1-5-2:Mapper.xml配置:

 <select id="queryOrderById" 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>

1-6:订单项中方法的配置:

注意:使用左外连接而非内连接!!!

1-6-1:根据订单项id去查询:

  OrderItem queryOrderItemById(Integer orderItemId);

1-6-2:Mapper.xml配置:

<select id="queryOrderItemById" 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>

1-7:Service配置:
1-7-1:订单:OrderService:

public interface OrderService {

    List<Order> queryOrderById(Integer orderId);
}

1-7-2:订单:OrderServiceImpl:


@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public List<Order> queryOrderById(Integer orderId) {
        return orderMapper.queryOrderById(orderId);
    }
}

1-7-3:测试类:OrderServiceTest (订单测试类)

public class OrderServiceTest extends SpringJunitBaseTest {

    @Autowired
    private OrderService orderService;

    @Test
    public void queryOrderById() {
        //查询订单编号为3 的订单
        List<Order> orders = orderService.queryOrderById(3);
        for (Order order : orders) {
            System.out.println(order);
        }
    }
}

结果:在这里插入图片描述

2、多对多:书籍与类别为例:

2-1:书籍与类别是一对多的关系
书籍实体类配置:

    private Set<Category> categories = new HashSet<>();

2-2:类别与书籍也是一对多的关系:
类别实体类配置:

 private Set<HBook> hBooks = new HashSet<>();

2-3:配置mybatis关联映射:
2-3-1:一对多、书籍中的Mapper.xml配置:

<collection property= oftype=“类的全路径名”>

<resultMap id="bookMap" 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>

2-3-2:一对多、类别中的Mapper.xml配置:

<collection property= oftype=“类的全路径名”>

 <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>

2-4:方法配置:
2-4-1:HBookMapper配置

 HBook queryBookById(Integer bookId);

2-4-2:Mapper.xml配置:

  <select id="queryBookById" resultMap="bookMap" 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>

2-5:Service配置:
2-5-1:HBookService

public interface HBookService {

    HBook queryBookById(Integer bookId);
}
2-5-2:HBookServiceImpl 
@Service
public class HBookServiceImpl implements HBookService {

    @Autowired
    private HBookMapper hBookMapper;

    @Override
    public HBook queryBookById(Integer bookId) {
        return hBookMapper.queryBookById(bookId);
    }
}

2-6:测试:

public class HBookServiceTest extends SpringJunitBaseTest {

    @Autowired
    private  HBookService hBookService;

    @Test
    public void queryBookById() {
        HBook hBook = hBookService.queryBookById(2);
        System.out.println(hBook);

    }

猜你喜欢

转载自blog.csdn.net/qq_41320105/article/details/85229557
今日推荐