从零开始系列——1对多关系查询

1.OneToMany关联查询

举例:淘宝上的物品都会使用多张图片来进行描述,也就是一个物品对应多张图片

One : 物品

Many:物品图片

OneToMany的实质:通过物品来找到对应的物品图片

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="goodsDetail">
 <select id="selectByGoodsId" parameterType="Integer" resultType="com.lx.entity.GoodsDetail">
     select * from t_goods_detail where goods_id = #{value}
 </select>
</mapper>

 

public class Goods {
    private Integer goodsId;                        // 商品编号
    private String title;                           // 标题
    private String subTitle;                        // 副标题
    private Float originalCost;                     // 原始价格
    private Float currentPrice;                     // 当前价格
    private Float discount;                         // 折扣率
    private Integer isFreeDelivery;                 // 是否包邮 1-包邮 0不包邮
    private Integer categoryId;                     // 分类编号
    private List<GoodsDetail> goodsDetailLists;     // 一个Goods对象下可以有多个GoodsDetail对象  一对多
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间 用来区分sql id-->
<mapper namespace="goods">
     <resultMap id="rmGoods1" type="com.lx.entity.Goods">
        <id column="goods_id" property="goodsId"></id>
        <collection property="goodsDetailLists" select="goodsDetail.selectByGoodsId" column="goods_id"/>
    </resultMap>
    <select id="selectOneToMany" resultMap="rmGoods1">
        select * from t_goods limit 0,2
    </select>
</mapper>

<collection>:描述Goods中的goodsDetailLists属性数据从何而来

collection的含义是在select * from t_goods limit 0,2得到结果后,对所有Goods对象遍历得到goods_id字段值

并代入到goodsDetail命名空间下的selectByGoodsId的SQL语句中查询
将得到的商品详情集合赋值到goodsDetails list集合中
实际调用goods.selectOneToMany即可,返回Goods对象,而我们需要只是Goods对象中的goodsDetailList属性,里面封装了某个物品对应的所有图片信息

物联沃分享整理
物联沃-IOTWORD物联网 » 从零开始系列——1对多关系查询

发表评论