我准备开一个系列,就是写一些在简要的学习项目中可能会用到的奇奇怪怪的功能,比如线程池或者统一异常处理类
取名为【项目demo】系列
然后将会同步到GitHub中:https://github.com/Livorth/FunctionalLearning
分页插件的使用
使用MybatisPlus的分页插件
这里参照官网的流程来写:https://baomidou.com/guide/page.html
其中最主要的就是添加MybatisPlus的分页配置,然后在使用时,传递的参数改为Page和IPage
-
进行一个MybatisPlus的配置
注意有新旧两个版本,既然官方都给出新版了,那么直接用新版吧
package cn.livorth.functionallearning.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @program: FunctionalLearning * @description: MybatisPlus配置 * @author: livorth * @create: 2021-10-02 17:50 **/ @Configuration @MapperScan("cn.livorth.functionallearning.dao") public class MybatisPlusConfig { /** * 新版 * 这里主要是在MybatisPlus的拦截器中添加page的拦截器,相较于老版泛用性更高 * 实际使用上还是差不多的,然后记得在新建PaginationInnerInterceptor的时候注意自己是使用的哪个数据库 * @return */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); // 添加一个单页最大数量,-1则不受限制 paginationInterceptor.setMaxLimit(100L); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
-
在UserMapper中添加分页查询的方法
/** * 返回分页后的用户信息 * @param page * @return */ IPage<User> getAllUserByPage(Page<User> page);
-
既然是自己写的方法,那么也要写对应xml文件:UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.livorth.functionallearning.dao.UserMapper"> <resultMap id="userMap" type="cn.livorth.functionallearning.entity.User"> <id column="user_id" property="userId" /> <result column="user_name" property="userName"/> <result column="password" property="password"/> </resultMap> <select id="listArticle" resultType="cn.livorth.functionallearning.entity.User"> select * FROM user </select> </mapper>
-
继续往上层写,即service层
UserService.java
/** * 返回分页后的用户信息 * @return */ List<User> getAllUserByPage(Page<User> page);
UserServiceImpl.java
@Override public List<User> getAllUserByPage(Page<User> page) { // 调用分页方法 IPage<User> allUserByPage = userMapper.getAllUserByPage(page); // 转换为List List<User> records = allUserByPage.getRecords(); return records; }
-
最后来写controller的请求
UserController.java
/** * /user/page/3/5 * @param thePage 当前多少页 * @param pageSize 每页多少个 * @return */ @GetMapping("page/{thePage}/{pageSize}") public List<User> getAllUserByPage(@PathVariable("thePage") int thePage, @PathVariable("pageSize") int pageSize){ Page<User> page = new Page<>(thePage, pageSize); return userService.getAllUserByPage(page); }
-
接下来启动项目进行一个测试
写在后面
其实实际上结合前端的分页插件,请求是post,之后再改就好了
然后就是其中的参数传递,直接使用Page我个人觉得不是很合理,不论是从前端传过来的数据还是传往Service层的数据,都可以使用vo或bo封装来进行传递
我的项目demo系列都会同步到GitHub上,欢迎围观
https://github.com/Livorth/FunctionalLearning