广告传媒建设网站,网站推广的技术有哪些,宣传片制作合同模板,php网站建设全程实例前言#xff1a;公共字段自动填充实现#xff0c;删除业务逻辑实现 一、公共字段自动填充
1.1 问题分析 1.2 代码实现 1.2.1 修改实体类Employee
package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.… 前言公共字段自动填充实现删除业务逻辑实现 一、公共字段自动填充
1.1 问题分析 1.2 代码实现 1.2.1 修改实体类Employee
package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;Data
public class Employee implements Serializable {private static final long serialVersionUID 1L;private Long id;private String username;private String name;private String password;private String phone;private String sex;private String idNumber;private Integer status;TableField(fill FieldFill.INSERT) //插入时更新字段private LocalDateTime createTime;TableField(fill FieldFill.INSERT_UPDATE) //插入和更新时更新字段private LocalDateTime updateTime;TableField(fill FieldFill.INSERT)private Long createUser;TableField(fill FieldFill.INSERT_UPDATE)private Long updateUser;}1.2.2 MyMetaObjectHandler package com.runa.reggie.common;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;Slf4j
Component
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 插入操作自动填充* param metaObject*/Overridepublic void insertFill(MetaObject metaObject) {log.info(公共字段自动填充[insert]...);log.info(metaObject.toString());metaObject.setValue(createTime, LocalDateTime.now());metaObject.setValue(updateTime, LocalDateTime.now());metaObject.setValue(createUser, new Long(1) );metaObject.setValue(updateUser, new Long(1));}/*** 更新操作自动填充* param metaObject*/Overridepublic void updateFill(MetaObject metaObject) {log.info(公共字段自动填充[update]...);log.info(metaObject.toString());metaObject.setValue(updateTime, LocalDateTime.now());metaObject.setValue(updateUser, new Long(1));}
}1.2.3 EmployeeController将新增、修改方法当中的公共字段赋值注释掉
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Employee;
import com.runa.reggie.service.impl.EmployeeServcie;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;Slf4j
RestController
RequestMapping(/employee)
public class EmployeeController {Autowiredprivate EmployeeServcie employeeServcie;/*** 员工登录* param request* param employee* return*///HttpServletRequest request 是为了将登录对象塞入sessionPostMapping(/login)public REmployee login(HttpServletRequest request, RequestBody Employee employee){//1、将页面提交的密码password进行md5加密处理String password employee.getPassword();password DigestUtils.md5DigestAsHex(password.getBytes());//2、根据页面提交的用户名username查询数据库LambdaQueryWrapperEmployee queryWrapper new LambdaQueryWrapper();queryWrapper.eq(Employee::getUsername,employee.getUsername());Employee emp employeeServcie.getOne(queryWrapper);//3、如果没有查询到则返回登录失败结果if(emp null){return R.error(登录失败);}//4、密码比对如果不一致则返回登录失败结果if(!emp.getPassword().equals(password)){return R.error(登录失败);}//5、查看员工状态如果为已禁用状态则返回员工已禁用结果if(emp.getStatus() 0){return R.error(账号已禁用);}//6、登录成功将员工id存入Session并返回登录成功结果request.getSession().setAttribute(employee,emp.getId());return R.success(emp);}PostMapping(/logout)public RString logout(HttpServletRequest request){// 清理Session 中保存的当前员工的idrequest.getSession().removeAttribute(emplyee);return R.success(退出成功);}PostMappingpublic RString save(HttpServletRequest request, RequestBody Employee employee){log.info(新增员工员工信息为:{},employee.toString());// 设置初始密码123456需要进行md5加密处理employee.setPassword(DigestUtils.md5DigestAsHex(123456.getBytes()));// employee.setCreateTime(LocalDateTime.now());
// employee.setUpdateTime(LocalDateTime.now());
// //获得当前用户的id
// Long empId (Long) request.getSession().getAttribute(employee);
// employee.setCreateUser(empId);
// employee.setUpdateUser(empId);employeeServcie.save(employee);return R.success(新增员工成功);}/*** 员工信息分页查询* param page* param pageSize* param name* return*/GetMapping(/page)public RPage page(int page, int pageSize,String name){log.info(page {}, pageSize {}, name {},page, pageSize, name);// 构造分页构造器Page pageInfo new Page(page, pageSize);//构造条件构造器LambdaQueryWrapperEmployee queryWrapper new LambdaQueryWrapper();// 添加过滤条件//当传入的name不为空的时候才会添加条件queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);// 添加排序条件queryWrapper.orderByDesc(Employee::getUpdateTime);//执行查询employeeServcie.page(pageInfo, queryWrapper);return R.success(pageInfo);}/*** 根据ID修改员工信息* param employee* return*/PutMappingpublic RString update(HttpServletRequest request, RequestBody Employee employee){log.info(employee.toString());// Long empId (Long) request.getSession().getAttribute(employee);
// employee.setUpdateUser(empId);
// employee.setUpdateTime(LocalDateTime.now());employeeServcie.updateById(employee);return R.success(员工信息修改成功);}GetMapping(/{id})public REmployee GetById(PathVariable Long id){log.info(根据id查询员工{},id);Employee employee employeeServcie.getById(id);if(employee ! null){return R.success(employee);}return R.error(没有查询到对应员工信息);}}1.3 功能测试 1.4 功能完善 1.4.1 BaseContext package com.runa.reggie.common;public class BaseContext {private static ThreadLocalLong threadLocal new ThreadLocal();public static void setCurrentId(Long id){threadLocal.set(id);}public static Long getCurrent(){return threadLocal.get();}
}1.4.2 LoginCheckFilter优化将用户id塞进线程
package com.runa.reggie.filter;import com.alibaba.fastjson.JSON;
import com.runa.reggie.common.BaseContext;
import com.runa.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;Slf4j
WebFilter(filterName loginCheckFilter, urlPatterns /*)
public class LoginCheckFilter implements Filter {// 路径匹配器public static final AntPathMatcher PATH_MATCHER new AntPathMatcher();Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;// 1 获取本次请求的URI// request.getRequestURL()返回的是全路径。// request.getRequestURI()返回的是除去协议域名IP端口号之后的路由部分。String requestURI request.getRequestURI();log.info(拦截到请求【{}】,requestURI);// 定义一些不需要处理的路径String[] urls new String[]{/employee/login, // 登录不需要/employee/logout,/backend/**,/front/**};// 2 判断本次请求是否需要处理boolean check check(urls, requestURI);// 3 如果不需要处理,则直接放行if(check){log.info(本次请求【 {} 】 不需要处理,requestURI);filterChain.doFilter(request,response);return;}// 4 判断登录状态如果已登录则直接放行if(request.getSession().getAttribute(employee) ! null){log.info(用户已登录请求url为【{}】, 用户id为:【 {} 】 ,requestURI,request.getSession().getAttribute(employee));// 获取ID 塞进线程Long empId (Long) request.getSession().getAttribute(employee);BaseContext.setCurrentId(empId);filterChain.doFilter(request,response);return;}log.info(用户未登录);// 5 如果未登录则返回未登录结果通过输出流方式向客户端页面响应数据response.getWriter().write(JSON.toJSONString(R.error(NOTLOGIN)));return;}/*** 路径匹配检查本次请求是否需要放行* param urls* param requestURI* return*/public boolean check(String[] urls, String requestURI){for (String url : urls) {boolean match PATH_MATCHER.match(url, requestURI);if(match){return true;}}// 循环都匹配不上就返回falsereturn false;}
}1.4.3 MyMetaObjectHandler
package com.runa.reggie.common;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;Slf4j
Component
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 插入操作自动填充* param metaObject*/Overridepublic void insertFill(MetaObject metaObject) {log.info(公共字段自动填充[insert]...);log.info(metaObject.toString());metaObject.setValue(createTime, LocalDateTime.now());metaObject.setValue(updateTime, LocalDateTime.now());metaObject.setValue(createUser, BaseContext.getCurrent());metaObject.setValue(updateUser, BaseContext.getCurrent());}/*** 更新操作自动填充* param metaObject*/Overridepublic void updateFill(MetaObject metaObject) {log.info(公共字段自动填充[update]...);log.info(metaObject.toString());metaObject.setValue(updateTime, LocalDateTime.now());metaObject.setValue(updateUser, BaseContext.getCurrent());}
}二、新增分类
2.1 需求分析 2.2 数据模型 2.3 代码实现 2.3.1 实体类Category
package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;/*** 分类*/
Data
public class Category implements Serializable {private static final long serialVersionUID 1L;private Long id;//类型 1 菜品分类 2 套餐分类private Integer type;//分类名称private String name;//顺序private Integer sort;//创建时间TableField(fill FieldFill.INSERT)private LocalDateTime createTime;//更新时间TableField(fill FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;//创建人TableField(fill FieldFill.INSERT)private Long createUser;//修改人TableField(fill FieldFill.INSERT_UPDATE)private Long updateUser;//是否删除private Integer isDeleted;}2.3.2 CategoryMapper
package com.runa.reggie.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.runa.reggie.entity.Category;
import org.apache.ibatis.annotations.Mapper;Mapper
public interface CategoryMapper extends BaseMapperCategory {
}
2.3.3 CategoryService
package com.runa.reggie.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.runa.reggie.entity.Category;public interface CategoryService extends IServiceCategory {
}2.3.4 CategoryServiceImpl
package com.runa.reggie.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.runa.reggie.entity.Category;
import com.runa.reggie.mapper.CategoryMapper;
import com.runa.reggie.service.CategoryService;
import org.springframework.stereotype.Service;Service
public class CategoryServiceImpl extends ServiceImplCategoryMapper, Category implements CategoryService {
}2.3.5 CategoryController
package com.runa.reggie.controller;import com.runa.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 分类管理*/
Slf4j
RestController
RequestMapping(/category)
public class CategoryController {Autowiredprivate CategoryService categoryService;
}2.3.6 CategoryController新增save方法
package com.runa.reggie.controller;import com.runa.reggie.common.R;
import com.runa.reggie.entity.Category;
import com.runa.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 分类管理*/
Slf4j
RestController
RequestMapping(/category)
public class CategoryController {Autowiredprivate CategoryService categoryService;/*** 新增分类* param category* return*/PostMappingpublic RString save(RequestBody Category category){log.info(新增分类{}, category);categoryService.save(category);return R.success(新增分类成功);}
}
2.4 功能测试 三、分类信息分页查询
3.1 需求分析 3.2 代码实现 3.2.1 CategoryController
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Category;
import com.runa.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 分类管理*/
Slf4j
RestController
RequestMapping(/category)
public class CategoryController {Autowiredprivate CategoryService categoryService;/*** 新增分类* param category* return*/PostMappingpublic RString save(RequestBody Category category){log.info(新增分类{}, category);categoryService.save(category);return R.success(新增分类成功);}/*** 分页查询* param page* param pageSize* return*/GetMapping(/page)public RPage page(int page, int pageSize){log.info(page {}, pageSize {}, name {},page, pageSize);//分页构造器Page pageInfo new Page(page, pageSize);// 条件构造器LambdaQueryWrapperCategory queryWrapper new LambdaQueryWrapper();//添加排序条件根据sort排序queryWrapper.orderByAsc(Category::getSort);//进行分页查询categoryService.page(pageInfo, queryWrapper);return R.success(pageInfo);}
}3.2.1 Category注释是否删除字段
package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;/*** 分类*/
Data
public class Category implements Serializable {private static final long serialVersionUID 1L;private Long id;//类型 1 菜品分类 2 套餐分类private Integer type;//分类名称private String name;//顺序private Integer sort;//创建时间TableField(fill FieldFill.INSERT)private LocalDateTime createTime;//更新时间TableField(fill FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;//创建人TableField(fill FieldFill.INSERT)private Long createUser;//修改人TableField(fill FieldFill.INSERT_UPDATE)private Long updateUser;//是否删除
// private Integer isDeleted;}3.3 功能测试 四、删除分类
4.1 需求分析 4.2 代码实现 4.2.1 CategoryController
注意传参是ids
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Category;
import com.runa.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 分类管理*/
Slf4j
RestController
RequestMapping(/category)
public class CategoryController {Autowiredprivate CategoryService categoryService;/*** 新增分类* param category* return*/PostMappingpublic RString save(RequestBody Category category){log.info(新增分类{}, category);categoryService.save(category);return R.success(新增分类成功);}/*** 分页查询* param page* param pageSize* return*/GetMapping(/page)public RPage page(int page, int pageSize){log.info(page {}, pageSize {}, name {},page, pageSize);//分页构造器Page pageInfo new Page(page, pageSize);// 条件构造器LambdaQueryWrapperCategory queryWrapper new LambdaQueryWrapper();//添加排序条件根据sort排序queryWrapper.orderByAsc(Category::getSort);//进行分页查询categoryService.page(pageInfo, queryWrapper);return R.success(pageInfo);}/*** 根据id删除分类* param ids* return*/DeleteMappingpublic RString delete(Long ids){log.info(根据ID删除分类{},ids);categoryService.removeById(ids);return R.success(分类信息删除成功);}
}4.3 功能测试 4.4 功能完善 4.4.1 菜品实体类Dish
package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;/**菜品*/
Data
public class Dish implements Serializable {private static final long serialVersionUID 1L;private Long id;//菜品名称private String name;//菜品分类idprivate Long categoryId;//菜品价格private BigDecimal price;//商品码private String code;//图片private String image;//描述信息private String description;//0 停售 1 起售private Integer status;//顺序private Integer sort;TableField(fill FieldFill.INSERT)private LocalDateTime createTime;TableField(fill FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;TableField(fill FieldFill.INSERT)private Long createUser;TableField(fill FieldFill.INSERT_UPDATE)private Long updateUser;//是否删除private Integer isDeleted;}4.4.2 套餐实体类Setmeal
package com.runa.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;/*** 套餐*/
Data
public class Setmeal implements Serializable {private static final long serialVersionUID 1L;private Long id;//分类idprivate Long categoryId;//套餐名称private String name;//套餐价格private BigDecimal price;//状态 0:停用 1:启用private Integer status;//编码private String code;//描述信息private String description;//图片private String image;TableField(fill FieldFill.INSERT)private LocalDateTime createTime;TableField(fill FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;TableField(fill FieldFill.INSERT)private Long createUser;TableField(fill FieldFill.INSERT_UPDATE)private Long updateUser;//是否删除private Integer isDeleted;
}4.4.3 DishMapper
package com.runa.reggie.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.runa.reggie.entity.Dish;
import org.apache.ibatis.annotations.Mapper;Mapper
public interface DishMapper extends BaseMapperDish {
}4.4.4 SetmealMapper
package com.runa.reggie.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.runa.reggie.entity.Setmeal;
import org.apache.ibatis.annotations.Mapper;Mapper
public interface SetmealMapper extends BaseMapperSetmeal {
}4.4.5 DishService
package com.runa.reggie.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.runa.reggie.entity.Dish;public interface DishService extends IServiceDish {
}4.4.6 SetmealService
package com.runa.reggie.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.runa.reggie.entity.Setmeal;public interface SetmealService extends IServiceSetmeal {
}4.4.7 DishServiceImpl
package com.runa.reggie.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.runa.reggie.entity.Dish;
import com.runa.reggie.mapper.DishMapper;
import com.runa.reggie.service.DishService;
import org.springframework.stereotype.Service;Service
public class DishServiceImpl extends ServiceImplDishMapper, Dish implements DishService {
}4.4.8 SetmealServiceImpl
package com.runa.reggie.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.runa.reggie.entity.Setmeal;
import com.runa.reggie.mapper.SetmealMapper;
import com.runa.reggie.service.SetmealService;
import org.springframework.stereotype.Service;Service
public class SetmealServiceImpl extends ServiceImplSetmealMapper, Setmeal implements SetmealService {
}4.4.9 修改CategoryService
package com.runa.reggie.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.runa.reggie.entity.Category;public interface CategoryService extends IServiceCategory {public void remove(Long ids);
}4.4.10 自定义业务异常类CustomException package com.runa.reggie.common;/*** 自定义业务异常类*/
public class CustomException extends RuntimeException {public CustomException(String message){super(message);}
}4.4.11 CategoryServiceImpl
package com.runa.reggie.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.runa.reggie.common.CustomException;
import com.runa.reggie.entity.Category;
import com.runa.reggie.entity.Dish;
import com.runa.reggie.entity.Setmeal;
import com.runa.reggie.mapper.CategoryMapper;
import com.runa.reggie.service.CategoryService;
import com.runa.reggie.service.DishService;
import com.runa.reggie.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;Service
public class CategoryServiceImpl extends ServiceImplCategoryMapper, Category implements CategoryService {Autowiredprivate DishService dishService;Autowiredprivate SetmealService setmealService;Overridepublic void remove(Long ids) {LambdaQueryWrapperDish dishLambdaQueryWrapper new LambdaQueryWrapper();//添加查询条件根据分类id查询dishLambdaQueryWrapper.eq(Dish::getCategoryId,ids);int count1 dishService.count(dishLambdaQueryWrapper);// 查询分类是否关联了菜品如果关联了抛出一个业务异常if(count1 0){// 关联了 抛出异常throw new CustomException(当前分类下关联了菜品不能删除);}LambdaQueryWrapperSetmeal setmealLambdaQueryWrapper new LambdaQueryWrapper();//添加查询条件根据分类id查询setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,ids);int count2 setmealService.count(setmealLambdaQueryWrapper);// 查询分类是否关联了套餐如果关联了抛出一个业务异常if(count2 0){// 关联了 抛出异常throw new CustomException(当前分类下关联了套餐不能删除);}//执行删除super.removeById(ids);}
}4.4.12 GlobaExceptionHandler
package com.runa.reggie.common;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import java.sql.SQLIntegrityConstraintViolationException;/*** 全局异常处理*/
ControllerAdvice(annotations {RestController.class, Controller.class}) // 加了RestController Controller 注解的
ResponseBody
Slf4j
public class GlobaExceptionHandler {/*** 异常处理方法* return*/ExceptionHandler(SQLIntegrityConstraintViolationException.class)public RString exceptionHandler(SQLIntegrityConstraintViolationException ex){String msg ex.getMessage();log.error(msg);if(msg.contains(Duplicate entry)){String[] split msg.split( ); //空分割String resultMsg split[2] 已存在 ;return R.error(resultMsg);}return R.error(未知错误);}/*** 异常处理方法(处理自定义的)* return*/ExceptionHandler(CustomException.class)public RString exceptionHandler(CustomException ex){String msg ex.getMessage();log.error(msg);return R.error(msg);}}4.4.13 CategoryController
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Category;
import com.runa.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 分类管理*/
Slf4j
RestController
RequestMapping(/category)
public class CategoryController {Autowiredprivate CategoryService categoryService;/*** 新增分类* param category* return*/PostMappingpublic RString save(RequestBody Category category){log.info(新增分类{}, category);categoryService.save(category);return R.success(新增分类成功);}/*** 分页查询* param page* param pageSize* return*/GetMapping(/page)public RPage page(int page, int pageSize){log.info(page {}, pageSize {}, name {},page, pageSize);//分页构造器Page pageInfo new Page(page, pageSize);// 条件构造器LambdaQueryWrapperCategory queryWrapper new LambdaQueryWrapper();//添加排序条件根据sort排序queryWrapper.orderByAsc(Category::getSort);//进行分页查询categoryService.page(pageInfo, queryWrapper);return R.success(pageInfo);}/*** 根据id删除分类* param ids* return*/DeleteMappingpublic RString delete(Long ids){log.info(根据ID删除分类{},ids);
// categoryService.removeById(ids);categoryService.remove(ids);return R.success(分类信息删除成功);}
}五、修改分类
5.1 需求分析 5.2 代码实现
5.2.1 CategoryController
package com.runa.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Category;
import com.runa.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 分类管理*/
Slf4j
RestController
RequestMapping(/category)
public class CategoryController {Autowiredprivate CategoryService categoryService;/*** 新增分类* param category* return*/PostMappingpublic RString save(RequestBody Category category){log.info(新增分类{}, category);categoryService.save(category);return R.success(新增分类成功);}/*** 分页查询* param page* param pageSize* return*/GetMapping(/page)public RPage page(int page, int pageSize){log.info(page {}, pageSize {}, name {},page, pageSize);//分页构造器Page pageInfo new Page(page, pageSize);// 条件构造器LambdaQueryWrapperCategory queryWrapper new LambdaQueryWrapper();//添加排序条件根据sort排序queryWrapper.orderByAsc(Category::getSort);//进行分页查询categoryService.page(pageInfo, queryWrapper);return R.success(pageInfo);}/*** 根据id删除分类* param ids* return*/DeleteMappingpublic RString delete(Long ids){log.info(根据ID删除分类{},ids);
// categoryService.removeById(ids);categoryService.remove(ids);return R.success(分类信息删除成功);}PutMappingpublic RString update(RequestBody Category category){log.info(根据id更新分类信息{},category);categoryService.updateById(category);return R.success(修改分类信息成功);}
}5.3 功能测试