一对多 ,用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>
之后测试也是一样一样的 ,可以得到想要的结果