Mybaties分页插件使用, 参数校验以及全局异常处理

简介: 本文教你快速进行Mybaties分页插件使用, 参数校验以及全局异常处理

大家好, 我是时间静止~~~ , 今天我们来学习Mybaties分页插件使用, 参数校验以及全局异常处理

分页插件使用

  1. 引入jar包坐标, 这里进行了自动配置, 因此不需要重新创建bean或者配置类

 <!--分页插件-->
       <!-- pagehelper分页插件 -->
       <dependency>
           <groupId>com.github.pagehelper</groupId>
           <artifactId>pagehelper</artifactId>
           <version>5.2.0</version>
       </dependency>
       <dependency>
           <groupId>com.github.pagehelper</groupId>
           <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
           <version>1.3.0</version>
       </dependency>
       <dependency>
           <groupId>com.github.pagehelper</groupId>
           <artifactId>pagehelper-spring-boot-starter</artifactId>
           <version>1.3.0</version>
       </dependency>

  1. service层 (不是在controller层哦)

   @Override
   public PageInfo<VersionRecord> selectList(Integer pageNum, Integer pageSize, Integer updateType) {
    //1. 开启分页
       PageHelper.startPage(pageNum,pageSize);
       //2. 接收list<object>集合
       List<VersionRecord> versionRecordList = versionRecordMapper.selectPageByupdateType(updateType);
       //3.
       PageInfo<VersionRecord> pageInfo = new PageInfo<>(versionRecordList);
       return pageInfo;
   }

  1. controller层

@GetMapping("selectList")
   public ResponseEntity selectList(@RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum,
                                    @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize,
                                    @RequestParam(value = "updateType") Integer updateType) {
 
//直接返回这个分页对象即可
PageInfo<VersionRecord> versionRecordPageInfo = versionRecordService.selectList(pageNum, pageSize,updateType);

  1. 返回JSON文本格式

{
   "content": {
       "total": 3,
       "list": [
           {
               "versionId": 8,
               "updateType": 1,
               "versionNumber": "2.2.7",
               "versionSize": "193MB",
               "versionContent": "1.测试版本发布",
               "publishTime": "2021.11.04 15:48:49",
               "publishAccount": "admin",
               "updateState": 3,
               "fileUrl": "/upload/images/2.2.7.apk"
           },
           {
               "versionId": 6,
               "updateType": 1,
               "versionNumber": "2.2.6",
               "versionSize": "193MB",
               "versionContent": null,
               "publishTime": "2021.11.04 14:41:09",
               "publishAccount": "admin",
               "updateState": 3,
               "fileUrl": "/upload/images\\2.2.6.apk"
           },
           {
               "versionId": 5,
               "updateType": 1,
               "versionNumber": "2.2.6",
               "versionSize": "193MB",
               "versionContent": null,
               "publishTime": "2021.11.04 14:40:35",
               "publishAccount": "admin",
               "updateState": 3,
               "fileUrl": "/upload/images\\2.2.6.apk"
           }
       ],
       "pageNum": 1,
       "pageSize": 10,
       "size": 3,
       "startRow": 1,
       "endRow": 3,
       "pages": 1,
       "prePage": 0,
       "nextPage": 0,
       "isFirstPage": true,
       "isLastPage": true,
       "hasPreviousPage": false,
       "hasNextPage": false,
       "navigatePages": 8,
       "navigatepageNums": [
           1
       ],
       "navigateFirstPage": 1,
       "navigateLastPage": 1
   }
}

  1. 实际相当于执行了这样一条sql语句

select 查询列表
from
limit(page-1)*size ,size;
从n-1行后开始, 每行显示size个数据

分页查关键字询 特点: ①limit语句放在查询语句的,执行上语法上都在最后 ②公式, 要显示的页数page ,每页的条目数 size

参数校验以及全局异常处理

  1. jar坐标

 <!--参数校验-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-validation</artifactId>
       </dependency>

  1. 使用注解即可

publicclassItem {

   @NotNull(message = "id不能为空")
   @Min(value = 1, message = "id必须为正整数")
   private Long id;

   @Valid// 嵌套验证必须用@Valid
   @NotNull(message = "props不能为空")
   @Size(min = 1, message = "props至少要有一个自定义属性")
   private List<Prop> props;
}

  1. 全局异常处理

/**
* 全局异常处理
*/

@RestControllerAdvice
publicclassGlobalExceptionHandler {
   /**
    * 当系统出现 MethodArgumentNotValidException 这个异常时,会调用下面的方法
    * @param e
    * @return
    */

   @ExceptionHandler(value = MethodArgumentNotValidException.class)
   publicResponseEntityjsonErrorHandler(MethodArgumentNotValidExceptione)
{
       ReturnCode returnCode = ReturnCode.OK;
       ResponseEntity responseEntity = null;

       List<Map<String,Object>> list=new ArrayList<>();
       List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
       for (ObjectError allError : allErrors) {
           Map<String,Object> map=new HashMap<>();
           map.put("defaultMessage",allError.getDefaultMessage());
           map.put("objectName",allError.getObjectName());
           // 注意,这里面拿到具体的某一个属性
           FieldError fieldError= (FieldError) allError;
           map.put("field",fieldError.getField());
           list.add(map);
       }
       returnCode = ReturnCode.INFO_PARTID_FAIL;
       responseEntity = new ResponseEntity(returnCode);
       responseEntity.setContent(list);
       return responseEntity;
   }
}



==这个是返回实体
import com.example.callmachine.utils.ReturnCode;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

publicclassResponseEntity {

private ResponseHeader header = new ResponseHeader();
private Object content = new Object();

public ResponseHeader getHeader() {
 return header;
}

publicvoidsetHeader(ResponseHeader header) {
 this.header = header;
}

public Object getContent() {
 return content;
}

publicvoidsetContent(Object content) {
 this.content = content;
}

publicResponseEntity() {
}

publicResponseEntity(ReturnCode code) {
 this.header.setRtnCode(code.getCode());
 this.header.setReturnMsg(code.getMsg());
}

publicstatic String toJson(String returnCode, Object result) {
 ResponseHeader header = new ResponseHeader();
 header.setRtnCode(returnCode);
 header.setReturnMsg(ReturnCode.getReturnCodeByCode(returnCode).getMsg());
 ResponseEntity resEntity = new ResponseEntity();
 resEntity.setHeader(header);
 if (null != result) {
  resEntity.setContent(result);
 }
 return GsonUtils.toJson(resEntity);
}

publicstaticvoidsetResponse(HttpServletResponse response, String rspBody)throws IOException {
 response.setContentType("text/json;charset=UTF-8");// application/json
 response.getWriter().write(rspBody);
}
}


==返回码
publicenum ReturnCode {
//(00000 - 00999) System or common code
ERROR       ("0",     "失败"),
OK                           ("1",     "成功"),
SERVICE_NOT_FOUND            ("2",     "找不到系统服务"),
NO_DATA                ("3",     "暂无数据"),
ILLEGAL_ACCESS               ("4",     "非法访问"),
SYSTEM_ERROR                 ("999",   "系统错误"),
ReturnCode(String code, String msg) {
 this.code = code;
 this.msg = msg;
}

private String code;
private String msg;

public String getCode() {
 return code;
}

publicvoidsetCode(String code) {
 this.code = code;
}

public String getMsg() {
 return msg;
}

publicvoidsetMsg(String msg) {
 this.msg = msg;
}

//根据返回码获取返回对象
publicstatic ReturnCode getReturnCodeByCode(String code){
 for(ReturnCode returnCode : ReturnCode.values())
 {
  if(returnCode.getCode().equalsIgnoreCase(code))
   return returnCode;
 }  
 returnnull;
}



相关文章
|
2月前
|
JSON Java 数据格式
Springboot自定义全局异常处理
BasicErrorController是Spring Boot中默认提供的用于处理基本错误的控制器。它实现了ErrorController接口,用于处理在应用程序中发生的错误,例如404 Not Found等。此种方式是通过请求转发实现的,出现异常时,会转发到请求到/error,该接口对异常进行处理返回,是最符合全局异常处理的。
|
8月前
|
Java
Springboot 全局异常、返回实体配置
Springboot 全局异常、返回实体配置
38 4
|
12月前
|
SQL Java 数据库连接
MyBatis动态数据源配置(动态配置字段,库 适合简单逻辑)
MyBatis动态数据源配置(动态配置字段,库 适合简单逻辑)
99 0
|
前端开发 Java 数据库
SpringBoot分组校验及自定义校验注解
在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性。在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法。而这篇则是介绍一些进阶的校验方式。比如说:在某个接口编写的过程中肯定会遇到,当xxType值为A,paramA值必传。xxType值为B,paramB值必须传。对于这样的,通常的做法就是在controller加上各种if判断。显然这样的代码是不够优雅的,而分组校验及自定义参数校验,就是来解决这个问题的。
|
前端开发 Java 数据库
SpringBoot之自动配置类的解析和过滤机制
1.提炼三句话 整体来讲Spring Boot是通过条件注解、条件评估器和自动配置导入器等机制来实现自动配置的。 条件评估器来判断是否需要加载某个自动配置类。条件评估器通常被定义在“org.springframework.boot.autoconfigure.condition”包中,例如,ClassCondition、BeanCondition、MissingBeanCondition、WebApplicationCondition等 条件注解来判断是否需要加载某个自动配置类。条件注解通常被定义在“org.springframework.boot.autoconfigure.conditi
122 0
Springboot 全局异常捕获以及统一接口返回结果
Springboot 全局异常捕获以及统一接口返回结果
268 0
|
JSON Java 数据格式
hibernate-validator校验参数(统一异常处理)(下)
hibernate-validator校验参数(统一异常处理)
hibernate-validator校验参数(统一异常处理)(下)
|
Oracle Java 关系型数据库
hibernate-validator校验参数(统一异常处理)(上)
hibernate-validator校验参数(统一异常处理)
hibernate-validator校验参数(统一异常处理)(上)
|
Java
springboot IDEA 过滤器全局赋值的操作使用流程
springboot IDEA 过滤器全局赋值的操作使用流程
114 0
springMvc56-全局异常
springMvc56-全局异常
81 0