树型表的标记字段是什么?如何查询MySQL
树型表?
树型表的标记字段是parentId,即父节点的id
查询一个树型表的方法:
- 档层级固定时可以用表的自键进行查询
- 如果想灵活查询每一层可以使用
mysql
递归方法,使用with RECURSIVE
实现
Mybatis的ResultType
和ResultMap
的区别是什么?
ResultType
:指定映射类型,只要查询的字段名和类型的属性名匹配就可以自动映射。
ResultMap
:自定义映射规则,当查询的字段名和映射类型的树型不匹配时可以通过ResultMap
自定义映射规则,也可以实现一对一,一对多映射。
#{}
和${}
有什么区别
#{}
是一个标记占位符,可以防止sql注入
${}
可用于在动态sql中拼接字符串,可能导致sql注入
项目中如何进行异常处理
自定义一个统一的异常处理器去捕获并处理异常,使用控制器增加注解@ControllerAdvice
和异常处理注解@ExceptionHandler
来实现
处理自定义异常
程序在编写代码时根据校验结果主动抛出自定义异常类对象,抛出异常时指定详细的异常信息,异常处理器捕获异常信息记录异常日志并相应给用户
处理未知异常
接口执行过程中的一些运行时异常也会有异常处理器统一捕获,记录异常日志,统一相应给用户500错误
在异常处理器中还可以针对某个异常类型进行单独处理。
@Slf4j
@ResponseBody
@ControllerAdvice(annotations = {RestController.class, Controller.class})
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(XueChengPlusException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse customException(CustomException e) {
log.error("【系统异常】{}", e.getErrMessage(), e);
return new RestErrorResponse(e.getErrMessage());
}
@ResponseBody
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse exception(Exception e) {
log.error("【系统异常】{}", e.getMessage(), e);
return new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
}
}
请求参数的合法性校验是怎么做的?
使用基于JSR-303的校验框架实现,SpringBoot
提供了JSR-303的支持,即spring-boot-starter-validation
,它包括了很多校验规则,只需要在模型类中通过注解指定校验规则,在Controller
方法开启校验即可实现。