不能使用通用mapper
编写pojo
CategoryVO
package com.imooc.pojo.vo;
import java.util.List;
public class CategoryVO {
private Integer id;
private String name;
private String type;
private Integer fatherId;
private List<SubCategoryVO> subCatList;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Integer getFatherId() {
return fatherId;
}
public void setFatherId(Integer fatherId) {
this.fatherId = fatherId;
}
public List<SubCategoryVO> getSubCatList() {
return subCatList;
}
public void setSubCatList(List<SubCategoryVO> subCatList) {
this.subCatList = subCatList;
}
}
SubCategoryVO
package com.imooc.pojo.vo;
public class SubCategoryVO {
private Integer subId;
private String subName;
private String subType;
private Integer subFatherId;
public Integer getSubId() {
return subId;
}
public void setSubId(Integer subId) {
this.subId = subId;
}
public String getSubName() {
return subName;
}
public void setSubName(String subName) {
this.subName = subName;
}
public String getSubType() {
return subType;
}
public void setSubType(String subType) {
this.subType = subType;
}
public Integer getSubFatherId() {
return subFatherId;
}
public void setSubFatherId(Integer subFatherId) {
this.subFatherId = subFatherId;
}
}
CategoryMapperCustom
package com.imooc.mapper;
import com.imooc.my.mapper.MyMapper;
import com.imooc.pojo.Category;
import com.imooc.pojo.vo.CategoryVO;
import java.util.List;
public interface CategoryMapperCustom {
public List<CategoryVO> getSubCatList(Integer rootCatId);
}
com.imooc.mapper.CategoryMapperCustom
<?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="com.imooc.mapper.CategoryMapperCustom" >
<resultMap id="myCategoryVo" type="com.imooc.pojo.vo.CategoryVO">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="type" property="type"/>
<result column="fatherId" property="fatherId"/>
<!--
collection标签:用于定义关联的list集合类型的封装规则
property:对应三级分类的list属性名
ofType:集合的类型,三级分类的vo
-->
<collection property="subCatList" ofType="com.imooc.pojo.vo.SubCategoryVO">
<id column="subId" property="subId"/>
<result column="subName" property="subName"/>
<result column="subType" property="subType"/>
<result column="subFatherId" property="subFatherId"/>
</collection>
</resultMap>
<select id="getSubCatList" parameterType="int" resultMap="myCategoryVo">
SELECT
f.id AS id,
f. NAME AS name,
f.type AS type,
f.father_id AS fatherId,
c.id AS subId,
c. NAME AS subName,
c.type AS subType,
c.father_id AS subFatherId
FROM
category f
LEFT JOIN category c ON f.id = c.father_id
WHERE
f.father_id = #{rootCatId}
</select>
</mapper>
CategoryService
package com.imooc.service;
import com.imooc.pojo.Category;
import com.imooc.pojo.vo.CategoryVO;
import java.util.List;
public interface CategoryService {
/*
* 查询所有一级分类
* */
public List<Category> queryAllRootLevelCat();
/**
* 根据一级分类id查询子分类信息
* @param rootCatId
* @return
*/
public List<CategoryVO> getSubCatList(Integer rootCatId);
}
CategoryServiceImpl
package com.imooc.service.impl;
import com.imooc.mapper.CategoryMapper;
import com.imooc.mapper.CategoryMapperCustom;
import com.imooc.pojo.Category;
import com.imooc.pojo.vo.CategoryVO;
import com.imooc.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
@Service
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Autowired
private CategoryMapperCustom categoryMapperCustom;
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public List<Category> queryAllRootLevelCat() {
Example example=new Example(Category.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("type",1);
List<Category> result = categoryMapper.selectByExample(example);
return result;
}
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public List<CategoryVO> getSubCatList(Integer rootCatId) {
return categoryMapperCustom.getSubCatList(rootCatId);
}
}
IndexController
package com.imooc.controller;
import com.imooc.enums.YesOrNo;
import com.imooc.pojo.Carousel;
import com.imooc.pojo.Category;
import com.imooc.pojo.vo.CategoryVO;
import com.imooc.service.CarouselService;
import com.imooc.service.CategoryService;
import com.imooc.utils.IMOOCJSONResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
@Api(value = "首页",tags = {"首页展示相关接口"})
@RestController
@RequestMapping("index")
public class IndexController {
@Autowired
private CarouselService carouselService;
@Autowired
private CategoryService categoryService;
@ApiOperation(value = "获取首页轮播图",notes = "获取首页轮播图",httpMethod = "GET")
@GetMapping("/carousel")
public IMOOCJSONResult carousel(){
List<Carousel> list = carouselService.queryAll(YesOrNo.YES.type);
return IMOOCJSONResult.ok(list);
}
/*
* 首页分类展示需求:
* 1.第一次刷新主页查询大分类,渲染展示到首页
* 2.如果鼠标移动到大分类,则加载其子分类的内容,如果已经存在子分类,则不需要加载(懒加载)
* */
@ApiOperation(value = "获取商品分类(一级分类)",notes = "获取商品分类(一级分类)",httpMethod = "GET")
@GetMapping("/cats")
public IMOOCJSONResult cates(){
List<Category> list = categoryService.queryAllRootLevelCat();
return IMOOCJSONResult.ok(list);
}
@ApiOperation(value = "获取商品子分类",notes = "获取商品子分类",httpMethod = "GET")
@GetMapping("/subCat/{rootCatId}")
public IMOOCJSONResult subCat(
@ApiParam(name = "rootCatId",value = "一级分类id",required = true)
@PathVariable Integer rootCatId){
if(rootCatId==null){
return IMOOCJSONResult.errorMsg("分类存在");
}
List<CategoryVO> list = categoryService.getSubCatList(rootCatId);
return IMOOCJSONResult.ok(list);
}
}