ssm实现一对多的关系

商品和栏目
例如:华为手机,苹果手机 都被包含于 手机
商品实体

public class Good {

    private int goodId;
    private String goodName;
    private float goodPrice;
    private int goodNum;
    private String goodDescription;
    private String goodPhotoName;
    private Category goodCategorys;      //使用一个goodCategory表示栏目

    public Good(){}

    public int getGoodId() {
        return goodId;
    }

    public void setGoodId(int goodId) {
        this.goodId = goodId;
    }

    public String getGoodName() {
        return goodName;
    }

    public void setGoodName(String goodName) {
        this.goodName = goodName;
    }

    public float getGoodPrice() {
        return goodPrice;
    }

    public void setGoodPrice(float goodPrice) {
        this.goodPrice = goodPrice;
    }

    public int getGoodNum() {
        return goodNum;
    }

    public void setGoodNum(int goodNum) {
        this.goodNum = goodNum;
    }

    public String getGoodDescription() {
        return goodDescription;
    }

    public void setGoodDescription(String goodDescription) {
        this.goodDescription = goodDescription;
    }

    public Category getGoodCategorys() {
        return goodCategorys;
    }

    public void setGoodCategorys(Category goodCategorys) {
        this.goodCategorys = goodCategorys;
    }

    public String getGoodPhotoName() {
        return goodPhotoName;
    }

    public void setGoodPhotoName(String goodPhotoName) {
        this.goodPhotoName = goodPhotoName;
    }
    
    @Override
    public String toString() {
        return "Good{" +
                "goodId=" + goodId +
                ", goodName='" + goodName + '\'' +
                ", goodPrice=" + goodPrice +
                ", goodNum=" + goodNum +
                ", goodDescription='" + goodDescription + '\'' +
                ", goodPhotoName='" + goodPhotoName + '\'' ;
    }
}

栏目实体

public class Category {

    private int cateId;
    private String cateName;
    private int cateDisplay;
    public List<Good> listGood;   //使用list表示每个栏目里的商品

    public Category(){}

    public int getCateId() {
        return cateId;
    }

    public void setCateId(int cateId) {
        this.cateId = cateId;
    }

    public String getCateName() {
        return cateName;
    }

    public void setCateName(String cateName) {
        this.cateName = cateName;
    }

    public int getCateDisplay() {
        return cateDisplay;
    }

    public void setCateDisplay(int cateDisplay) {
        this.cateDisplay = cateDisplay;
    }

    public List<Good> getListGood() {
        return listGood;
    }

    public void setListGood(List<Good> listGood) {
        this.listGood = listGood;
    }

    public String toString(){
        return "Category[cateId="+this.cateId+
                ",cateName="+this.cateName+
                ",cateDisplay="+this.cateDisplay+"]";
    }
}

categoryMapper.xml

    <!--  定义数据库的字段与实体的字段对应 -->
    <resultMap id="categoryBean" type="com.zhou.bean.Category">
        <id column="cateId" property="cateId"/>
        <result column="cateName" property="cateName"/>
        <result column="cateDisplay" property="cateDisplay"/>
        <!-- 一对多的关系 -->
        <!--  property指的时集合属性的值,ofType指的时集合元素的类型 -->
        <collection property="listGood" ofType="com.zhou.bean.Good"  >
            <id column="goodId" property="goodId"/>
            <result column="goodName" property="goodName"/>
            <result column="goodPrice" property="goodPrice"/>
            <result column="goodNum" property="goodNum"/>
            <result column="goodDescription" property="goodDescription"/>
            <result column="goodPhotoName" property="goodPhotoName"/>
        </collection>
    </resultMap>

    <select id="selectBydId" resultMap="categoryBean" parameterType="int">
        select c.*,g.* from tb_good g inner join tb_category c
        on g.goodCategory = c.cateId
        where c.cateId = #{cateId}
    </select>
</mapper>

CateGoryMapper

public interface CategoryMapper {
    
    //根据栏目查询所有的商品
    Category selectBydId(int cateId);
}

测试

@RequestMapping(value="cateControl")
@Controller
public class CategoryController {

    @Autowired
    CategoryMapper categoryMapper;

    @RequestMapping(value="selectAll")
    @ResponseBody
    public Map<String,Object> selectAll(){
        Map<String , Object> map = new HashMap<>();
        Category category = categoryMapper.selectBydId(1);
        System.out.println(category.getCateName()+category.getCateDisplay());
        List<Good> goods = category.getListGood();
        System.out.println("------------------");
        for(int i=0;i<goods.size();i++){
            Good good = goods.get(i);
            System.out.println(good.getGoodName());
        }
        return map; 
    }

}

测试结果
在这里插入图片描述
注意点说下
1.Category实体里放的是List list;
2.Good实体里放的是Category category;
3.CategoryMapper.xml 里使用一对多
property 是属性 ofType 是属性的类型

我之前一直遇到的问题说下:
1.一直报的是Result Map collection is not contain com.zhou.bean.Good
2.还报错过SqlSessionFactory错误

解决的办法:
1.a.Good实体里我还把Category外建名写在里面
的是第一个错误
2.sql语句写的不正确

sql语句的两种写法
1.select c.,g. from tb_good g inner join tb_category c
on g.goodCategory = c.cateId
where c.cateId = #{cateId}
2.select c.,g. from tb_good g, tb_category c
where g.goodCategory = c.cateId and c.cateId = #{cateId}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值