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);
}