商品和栏目
例如:华为手机,苹果手机 都被包含于 手机
商品实体
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}