一.一对多
一.用逆向工程生成实体类/mapper接口/mapper.xml
generatorConfig.xml
用的是订单和订单项来来表示一对多和多对一的关系
目标
传入订单id查询到订单本身以及订单本身所对应的所有订单项
传入订单项id查询到订单项本身以及订单项本身所对应的订单
二.建vo类
但是订单和订单实体类里面并没有这么多字段所以我们需要建一个vo类
订单里面包含了订单id和订单名称但是没有订单所对应的订单详细信息
所以新建订单的vo类
继承订单类
有一个订单项的集合的属性
因为一个订单对应多个订单项
反之订单项里面有订单项的详细信息但是没有它所对应订单
所以给订单项表也建一个vo类
继承订单项属性
有一个订单的属性
三.mapper配置文件
id:下面查询语句的对应映射关系
type:返回对象的类别
property:实体类字段
column:表对应的字段
<collecyion表示一对多的标签
property: 指的是集合属性的值, ofType:指的是集合中元素的类型
<association 表示多对一的标签
property: 指的是集合属性的值, ofType:指的是集合中元素的类型
OrderMapper.xml
<resultMap id="OrderVoMap" type="com.javaxl.ssm.model.vo.OrderVo" >
<result property="orderId" column="order_id"></result>
<result property="orderNo" column="order_no"></result>
<collection property="orderItems" ofType="com.javaxl.ssm.model.OrderItem">
<result property="orderItemId" column="order_item_id"></result>
<result property="oid" column="oid"></result>
<result property="productId" column="product_id"></result>
<result property="quantity" column="quantity"></result>
</collection>
</resultMap>
<select id="queryOrderVoByOrderId" 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 = #{orderId}
</select>
OrderOItemMapper.xml
<resultMap id="OrderVoMap" type="com.javaxl.ssm.model.vo.OrderItemVo" >
<result property="orderItemId" column="order_item_id"></result>
<result property="oid" column="oid"></result>
<result property="productId" column="product_id"></result>
<result property="quantity" column="quantity"></result>
<association property="order" javaType="com.javaxl.ssm.model.Order">
<result property="orderId" column="order_id"></result>
<result property="orderNo" column="order_no"></result>
</association>
</resultMap>
<select id="queryOrderItemVoByOrderItemId" resultMap="OrderVoMap" 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>
测试
多对多
多对一就是两个多对一
这里用书籍和书籍类别来做例子
一本书对应多个书籍类别
一个类别又对应多本书
还是建vo类
HbookCategoryMapper.xml
<resultMap id="HbookVoMap" type="com.javaxl.ssm.model.vo.HbookVo">
<result property="bookId" column="book_id"></result>
<result property="bookName" column="book_name"></result>
<collection property="categories" ofType="com.javaxl.ssm.model.Category">
<result property="categoryId" column="category_id"></result>
<result property="categoryName" column="category_name"></result>
</collection>
</resultMap>
<resultMap id="CategoryVoMap" type="com.javaxl.ssm.model.vo.CategoryVo">
<result property="categoryId" column="category_id"></result>
<result property="categoryName" column="category_name"></result>
<collection property="hbooks" ofType="com.javaxl.ssm.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>
测试