目录
事前说明:原视频教程中使用的是mybaits,我想试试能不能通过mybatis-plus做一下这个项目。由于日常工作外加上我的私人生活,视频一天的课,我可能得一周甚至更多时间才能敲完。文章中插入的代码是实现上一个功能的基础上加上新的功能,所以想看这个模块的完整代码,直接看最后一个标题的内容或者通过我的gitee地址看就行。
苍穹外卖mybatis-plus版https://gitee.com/xxyzc/sky-take-out
一、分类页面的分页和模糊查询
1、CategoryController类修改
package com.sky.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
* 模糊查询和分页查询分类
*
* @return
*/
@ApiOperation("模糊和分页查询分类")
@GetMapping("/page")
public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
PageResult pageResult = new PageResult();
pageResult.setTotal(categoryList.getTotal());
pageResult.setRecords(categoryList.getRecords());
return Result.success(pageResult);
}
}
2、CategoryService和impl的修改
package com.sky.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
public interface CategoryService {
/**
* 根据前台查询条件查询分类列表
*
* @param categoryPageQueryDTO
* @return
*/
IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);
}
package com.sky.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Override
public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
.like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
return categoryMapper.selectPage(iPage, queryWrapper);
}
}
3、CategoryMapper的创建
package com.sky.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sky.entity.Category;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CategoryMapper extends BaseMapper<Category> {
}
二、新增分类
1、Category类的修改
刚完成新增操作后,数据库中分类表的id是一大长串的值,为了让它自动递增,完成下列操作
(1)、在id属性上加上@TableId(value = "id", type = IdType.AUTO),
(2)、navicate中操作:选中数据库表category,右键点击“设计表”后弹出这个窗口,点“自动递增”,把那一大串的值修改成1。
修改后新增时可以让id值+1,从而避免新增时数据库中的id是一大长串的数字。
package com.sky.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
//类型: 1菜品分类 2套餐分类
private Integer type;
//分类名称
private String name;
//顺序
private Integer sort;
//分类状态 0标识禁用 1表示启用
private Integer status;
//创建时间
private LocalDateTime createTime;
//更新时间
private LocalDateTime updateTime;
//创建人
private Long createUser;
//修改人
private Long updateUser;
}
2、CategoryController类修改
package com.sky.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
* 模糊查询和分页查询分类
*
* @return
*/
@ApiOperation("模糊和分页查询分类")
@GetMapping("/page")
public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
PageResult pageResult = new PageResult();
pageResult.setTotal(categoryList.getTotal());
pageResult.setRecords(categoryList.getRecords());
return Result.success(pageResult);
}
/**
* 新增分类
*
* @param categoryDTO 分类信息
* @return
*/
@ApiOperation("新增分类")
@PostMapping
public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
categoryService.addCategory(categoryDTO);
return Result.success();
}
}
3、CategoryService和impl的修改
package com.sky.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
public interface CategoryService {
/**
* 根据前台查询条件查询分类列表
*
* @param categoryPageQueryDTO
* @return
*/
IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);
/**
* 新增分类
*
* @param categoryDTO 新的分类信息
*/
void addCategory(CategoryDTO categoryDTO);
}
package com.sky.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Override
public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
.like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
return categoryMapper.selectPage(iPage, queryWrapper);
}
@Override
public void addCategory(CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
Category category = new Category();
BeanUtils.copyProperties(categoryDTO, category);
// 要求新增的分类是禁用状态,所以status=0
category.setStatus(0);
category.setCreateUser(BaseContext.getCurrentId());
category.setUpdateUser(BaseContext.getCurrentId());
category.setCreateTime(LocalDateTime.now());
category.setUpdateTime(LocalDateTime.now());
categoryMapper.insert(category);
}
}
4、CategoryMapper的修改
mapper不用修改!!!
三、启用和禁用分类
1、CategoryController类修改
package com.sky.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
* 模糊查询和分页查询分类
*
* @return
*/
@ApiOperation("模糊和分页查询分类")
@GetMapping("/page")
public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
PageResult pageResult = new PageResult();
pageResult.setTotal(categoryList.getTotal());
pageResult.setRecords(categoryList.getRecords());
return Result.success(pageResult);
}
/**
* 新增分类
*
* @param categoryDTO 分类信息
* @return
*/
@ApiOperation("新增分类")
@PostMapping
public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
categoryService.addCategory(categoryDTO);
return Result.success();
}
@ApiOperation("启用、禁用分类")
@PostMapping("/status/{status}")
public Result<String> changeStatus(@PathVariable Integer status, Long id) {
log.info("启用、禁用分类:{};id:{}", status, id);
categoryService.changeStatus(status, id);
return Result.success();
}
}
2、CategoryService和impl的修改
package com.sky.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
public interface CategoryService {
/**
* 根据前台查询条件查询分类列表
*
* @param categoryPageQueryDTO
* @return
*/
IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);
/**
* 新增分类
*
* @param categoryDTO 新的分类信息
*/
void addCategory(CategoryDTO categoryDTO);
/**
* 启用、禁用分类
*
* @param status 修改后的状态
* @param id 分类的id
*/
void changeStatus(Integer status, Long id);
}
package com.sky.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Autowired
private DishMapper dishMapper;
@Autowired
private SetmealMapper setmealMapper;
@Override
public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
.like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
return categoryMapper.selectPage(iPage, queryWrapper);
}
@Override
public void addCategory(CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
Category category = new Category();
BeanUtils.copyProperties(categoryDTO, category);
category.setStatus(0);
category.setCreateUser(BaseContext.getCurrentId());
category.setUpdateUser(BaseContext.getCurrentId());
category.setCreateTime(LocalDateTime.now());
category.setUpdateTime(LocalDateTime.now());
categoryMapper.insert(category);
}
@Override
public void changeStatus(Integer status, Long id) {
log.info("启用、禁用分类:{};id:{}", status, id);
Category category = new Category();
category.setId(id);
category.setStatus(status);
category.setUpdateTime(LocalDateTime.now());
category.setUpdateUser(BaseContext.getCurrentId());
categoryMapper.updateById(category);
}
}
3、CategoryMapper的修改
mapper不用修改!!!
四、分类修改
1、CategoryController类修改
package com.sky.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
* 模糊查询和分页查询分类
*
* @return
*/
@ApiOperation("模糊和分页查询分类")
@GetMapping("/page")
public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
PageResult pageResult = new PageResult();
pageResult.setTotal(categoryList.getTotal());
pageResult.setRecords(categoryList.getRecords());
return Result.success(pageResult);
}
/**
* 新增分类
*
* @param categoryDTO 分类信息
* @return
*/
@ApiOperation("新增分类")
@PostMapping
public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
categoryService.addCategory(categoryDTO);
return Result.success();
}
@ApiOperation("启用、禁用分类")
@PostMapping("/status/{status}")
public Result<String> changeStatus(@PathVariable Integer status, Long id) {
log.info("启用、禁用分类:{};id:{}", status, id);
categoryService.changeStatus(status, id);
return Result.success();
}
@ApiOperation("修改分类")
@PutMapping
public Result<String> updateCategory(@RequestBody CategoryDTO categoryDTO) {
log.info("修改分类:{}", categoryDTO);
categoryService.updateCategory(categoryDTO);
return Result.success();
}
}
2、CategoryService和impl的修改
package com.sky.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
public interface CategoryService {
/**
* 根据前台查询条件查询分类列表
*
* @param categoryPageQueryDTO
* @return
*/
IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);
/**
* 新增分类
*
* @param categoryDTO 新的分类信息
*/
void addCategory(CategoryDTO categoryDTO);
/**
* 启用、禁用分类
*
* @param status 修改后的状态
* @param id 分类的id
*/
void changeStatus(Integer status, Long id);
/**
* 修改分类
*
* @param categoryDTO 新的分类信息
*/
void updateCategory(CategoryDTO categoryDTO);
}
package com.sky.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Override
public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
.like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
return categoryMapper.selectPage(iPage, queryWrapper);
}
@Override
public void addCategory(CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
Category category = new Category();
BeanUtils.copyProperties(categoryDTO, category);
category.setStatus(0);
category.setCreateUser(BaseContext.getCurrentId());
category.setUpdateUser(BaseContext.getCurrentId());
category.setCreateTime(LocalDateTime.now());
category.setUpdateTime(LocalDateTime.now());
categoryMapper.insert(category);
}
@Override
public void changeStatus(Integer status, Long id) {
log.info("启用、禁用分类:{};id:{}", status, id);
Category category = new Category();
category.setId(id);
category.setStatus(status);
category.setUpdateTime(LocalDateTime.now());
category.setUpdateUser(BaseContext.getCurrentId());
categoryMapper.updateById(category);
}
@Override
public void updateCategory(CategoryDTO categoryDTO) {
log.info("修改分类:{}", categoryDTO);
Category category = categoryMapper.selectById(categoryDTO.getId());
category.setName(categoryDTO.getName());
category.setSort(categoryDTO.getSort());
category.setUpdateUser(BaseContext.getCurrentId());
category.setUpdateTime(LocalDateTime.now());
categoryMapper.updateById(category);
}
}
3、CategoryMapper的修改
mapper不用修改!!!
五、分类删除
分类的删除不是单纯直接删除,而是需要判断被删除的分类下是否已经有菜品或者套餐,如果有则不允许删除。
1、新增分类的报错提示消息
package com.sky.handler;
import com.sky.constant.MessageConstant;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.sql.SQLIntegrityConstraintViolationException;
@RestControllerAdvice
@Slf4j
public class CategoryAdvice {
@ExceptionHandler(DeletionNotAllowedException.class)
public Result<String> systemException(DeletionNotAllowedException ex) {
log.error("异常信息:{}", ex.getMessage());
return Result.error(ex.getMessage());
}
@ExceptionHandler
public Result<String> doSQLException(SQLIntegrityConstraintViolationException ex) {
log.error("异常信息:{}", ex.getMessage());
String message = ex.getMessage();
if (message.contains("Duplicate")) {
return Result.error(message.split(" ")[2] + MessageConstant.ALREADY_EXIST);
}
return Result.error(MessageConstant.UNKNOWN_ERROR);
}
}
2、CategoryController类修改
package com.sky.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关操作")
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
* 模糊查询和分页查询分类
*
* @return
*/
@ApiOperation("模糊和分页查询分类")
@GetMapping("/page")
public Result<PageResult> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("查询条件:categoryPageQueryDTO:{}", categoryPageQueryDTO);
IPage<Category> categoryList = categoryService.getCategoryList(categoryPageQueryDTO);
PageResult pageResult = new PageResult();
pageResult.setTotal(categoryList.getTotal());
pageResult.setRecords(categoryList.getRecords());
return Result.success(pageResult);
}
/**
* 新增分类
*
* @param categoryDTO 分类信息
* @return
*/
@ApiOperation("新增分类")
@PostMapping
public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
categoryService.addCategory(categoryDTO);
return Result.success();
}
@ApiOperation("启用、禁用分类")
@PostMapping("/status/{status}")
public Result<String> changeStatus(@PathVariable Integer status, Long id) {
log.info("启用、禁用分类:{};id:{}", status, id);
categoryService.changeStatus(status, id);
return Result.success();
}
@ApiOperation("修改分类")
@PutMapping
public Result<String> updateCategory(@RequestBody CategoryDTO categoryDTO) {
log.info("修改分类:{}", categoryDTO);
categoryService.updateCategory(categoryDTO);
return Result.success();
}
@ApiOperation("删除分类")
@DeleteMapping
public Result<String> deleteCategoryById(Long id) {
log.info("删除分类:{}", id);
categoryService.deleteCategoryById(id);
return Result.success();
}
}
3、CategoryService和impl的修改
package com.sky.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
public interface CategoryService {
/**
* 根据前台查询条件查询分类列表
*
* @param categoryPageQueryDTO
* @return
*/
IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO);
/**
* 新增分类
*
* @param categoryDTO 新的分类信息
*/
void addCategory(CategoryDTO categoryDTO);
/**
* 启用、禁用分类
*
* @param status 修改后的状态
* @param id 分类的id
*/
void changeStatus(Integer status, Long id);
/**
* 修改分类
*
* @param categoryDTO 新的分类信息
*/
void updateCategory(CategoryDTO categoryDTO);
/**
* 根据id删除分类
* 删除时需要判断该分类下有没有菜品或套餐,如果有则不能删除:通过category的id和dish以及setmeal的category_id关联查询
*
* @param id 要删除的分类id
*/
void deleteCategoryById(Long id);
}
impl中实现删除功能:通过分类表的id与菜品表和套餐表的category_id联查,查询是否含有该分类下的菜品和套餐。
package com.sky.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.exception.DeletionNotAllowedException;
import com.sky.mapper.CategoryMapper;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Autowired
private DishMapper dishMapper;
@Autowired
private SetmealMapper setmealMapper;
@Override
public IPage<Category> getCategoryList(CategoryPageQueryDTO categoryPageQueryDTO) {
log.info("service:categoryPageQueryDTO:{}", categoryPageQueryDTO);
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(categoryPageQueryDTO.getName()), Category::getName, categoryPageQueryDTO.getName())
.like(categoryPageQueryDTO.getType() != null, Category::getType, categoryPageQueryDTO.getType()).orderByAsc(Category::getSort);
IPage<Category> iPage = new Page<>(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
return categoryMapper.selectPage(iPage, queryWrapper);
}
@Override
public void addCategory(CategoryDTO categoryDTO) {
log.info("新增分类:{}", categoryDTO);
Category category = new Category();
BeanUtils.copyProperties(categoryDTO, category);
category.setStatus(0);
category.setCreateUser(BaseContext.getCurrentId());
category.setUpdateUser(BaseContext.getCurrentId());
category.setCreateTime(LocalDateTime.now());
category.setUpdateTime(LocalDateTime.now());
categoryMapper.insert(category);
}
@Override
public void changeStatus(Integer status, Long id) {
log.info("启用、禁用分类:{};id:{}", status, id);
Category category = new Category();
category.setId(id);
category.setStatus(status);
category.setUpdateTime(LocalDateTime.now());
category.setUpdateUser(BaseContext.getCurrentId());
categoryMapper.updateById(category);
}
@Override
public void updateCategory(CategoryDTO categoryDTO) {
log.info("修改分类:{}", categoryDTO);
Category category = categoryMapper.selectById(categoryDTO.getId());
category.setName(categoryDTO.getName());
category.setSort(categoryDTO.getSort());
category.setUpdateUser(BaseContext.getCurrentId());
category.setUpdateTime(LocalDateTime.now());
categoryMapper.updateById(category);
}
@Override
public void deleteCategoryById(Long id) {
log.info("分类的id:{}", id);
// 1、获取该分类下的dish
LambdaQueryWrapper<Dish> queryDish = new LambdaQueryWrapper<>();
queryDish.eq(Dish::getCategoryId, id);
List<Dish> dishes = dishMapper.selectList(queryDish);
// 2、获取该分类下的setmeal
LambdaQueryWrapper<Setmeal> querySetmeal = new LambdaQueryWrapper<>();
querySetmeal.eq(Setmeal::getCategoryId, id);
List<Setmeal> setmeals = setmealMapper.selectList(querySetmeal);
// 3、判断dish和setmeal是否为空,如果为空则执行删除分类的操作,否则提示该分类下有菜品或套餐,不允许删除
if (dishes != null && !dishes.isEmpty()) {
throw new DeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_DISH);
}
if (setmeals != null && !setmeals.isEmpty()) {
throw new DeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_SETMEAL);
}
categoryMapper.deleteById(id);
}
}
4、CategoryMapper的修改
mapper不用修改!!!