<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper"><!-- 实体类:public class User {private Integer id;private String name;private Integer age;private String email;private Integer sex;private Cat cat;private List<Course> courseList;}public class Cat {private String catname;}public class Course {private String coursename;private String teacher;private Integer userid;}--><!-- 第一种分页方式:limit,借助Sql语句进行分页。postman:localhost:8080/limitPageXxxController.java:@RequestMapping("limitPage")public void limitPage1(){Integer pageNum = 2;                            // ⻚码Integer pageSize = 3;                           // 每⻚显示记录条数Integer startIndex = (pageNum - 1) * pageSize;  // 起始下标List<User> userList = userMapper.selectAllUserByLimitPage(startIndex, pageSize);userList.forEach(user -> System.out.println(user));}XxxMapper.java:List<User> selectAllUserByLimitPage(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);效果:User{id=4, name='Sandy', age=21, email='test4@baomidou.com', sex=null, cat=null, courseList=null}User{id=5, name='Billie', age=24, email='test5@baomidou.com', sex=null, cat=null, courseList=null}--><select id="selectAllUserByLimitPage" resultType="User">select * from user limit #{startIndex},#{pageSize}</select><!-- 第二种分页方式:自定义拦截器,拦截器分页。拦截器功能的实现,在intercept方法中获取到select标签和sql语句的相关信息,拦截所有以ByPage结尾的select查询,并且统一在查询语句后面添加limit分页的相关语句,统一实现分页功能。postman:localhost:8080/selectAllUserByInterceptorByPageXxxController.java:@RequestMapping("selectAllUserByInterceptorByPage")public void selectAllUserByInterceptorByPage() {Map<String, Object> data = new HashMap();data.put("currPage", 1);data.put("pageSize", 4);List<User> userList = userMapper.selectAllUserByInterceptorByPage(data);userList.forEach(user -> System.out.println(user));}XxxMapper.java:List<User> selectAllUserByInterceptor(Map<String,Object> data);--><!--xml文件的select语句--><select id="selectAllUserByInterceptorByPage" parameterType="map" resultType="User">select * from user</select><!-- 第三种分页方式:PageHelper插件,拦截器分页。limit方法获取数据不难,难的是获取分⻚相关的数据⽐较难。可以借助mybatis的PageHelper插件。使⽤PageHelper插件进⾏分⻚,更加的便捷。准备工作:第⼀步:pom.xml,引⼊依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version></dependency>第⼆步:mybatis-config.xml⽂件中配置插件,typeAliases标签下⾯进⾏配置:<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>第二步:application.yml中配置插件# PageHelper分页插件pagehelper:helperDialect: mysqlsupportMethodsArguments: trueparams: count=countSqlpostman:localhost:8080/pageHelperPageXxxController.java:@RequestMapping("pageHelperPage")public void pageHelperPage(){// 开启分⻚:在查询语句之前开启分⻚功能。PageHelper.startPage(2, 2);// 执⾏查询语句List<User> userList = userMapper.selectAllUserByPageHelperPage();// 获取分⻚信息对象:在查询语句之后封装PageInfo对象。(PageInfo对象将来会存储到request域当中。在⻚⾯上展示。)PageInfo<User> pageInfo = new PageInfo<>(userList, 5);System.out.println(pageInfo);}XxxMapper.java:List<User> selectAllUserByPageHelperPage();--><select id="selectAllUserByPageHelperPage" resultType="User">select * from user</select><!-- 第四种分页方式:RowBoundsRowBounds本质就是封装了limit,我们只需要在业务层关注分页即可,,无须再传入指定数据。Mybatis内置了一个专门处理分页的类: RowBounds, 我们使用它可以轻松完成分页。分页查询所有用户,通过自带的RowBoundspostman:localhost:8080/pageRowBoundsPageXxxController.java:@RequestMapping("pageRowBoundsPage")public void pageRowBoundsPage(){int currPage = 3;int pageSize = 2;//注意:currPage和start别搞错了,一个表示当前页码,一个是从第几行读取记录int start = (currPage-1) *pageSize;//计算从第几行读取记录RowBounds rowBounds = new RowBounds(start,pageSize);List<User> userList = userMapper.selectAllUserByRowBounds(rowBounds);userList.forEach(user -> System.out.println(user));}XxxMapper.java:List<User> selectAllUserByRowBounds(RowBounds rowBounds);--><select id="selectAllUserByRowBounds" resultType="User">select * from user</select>
</mapper><!--(1)报错:pagehelper分页不生效不能引入pagehelper,因为这样会导致分页插件不起作用,除非在mybatisConfig.xml文件中再加入配置https://blog.csdn.net/amosjob/article/details/117250315?utm_medium=distribute.wap_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-117250315-blog-86480431.wap_relevant_featuresortv7&spm=1001.2101.3001.4242.1(2)报错:版本冲突版本冲突:http://www.yiduhao.com/index.php/index/news/news_detail.html?id=127(3)报错:Invalid bound statement (not found): ] with root causemapper-locations: classpath:mapper/*.xml配置:https://blog.csdn.net/hmonjcae/article/details/104481784(4)报错:不能用类别名mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #日志type-aliases-package: com.pojo                           #类别名mapper-locations: classpath:mapper/*.xml                 #配置XxxMapper.xml所在路径(5)报错:spring boot中interceptor拦截器未生效的解决本次解决的方案:@Component以后遇到大麻烦可以参考:http://events.jianshu.io/p/3309899ec399(6)参考:dljd - 老杜 - MyBatis讲义https://mikechen.cc/23836.html#%E4%BD%BF%E7%94%A8PageHelper%E6%8F%92%E4%BB%B6%E5%88%86%E9%A1%B5https://blog.csdn.net/m0_46761060/article/details/124144477(7)更多地了解https://www.cnblogs.com/fulong133/p/12711698.html(PageInfo属性表、PageInfo类的使用——Java Page分页显示、MyBatis分页插件-PageHelper的配置与应用)-->

附:项目的目标结构和关键代码

application.yml文件:

spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://10.203.5.185:3306/fLearn?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=falseusername: rootpassword: MySQL#567890
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpltype-aliases-package: com.pojomapper-locations: classpath:mapper/*.xml
# PageHelper分页插件
pagehelper:helperDialect: mysqlreasonable: falsesupportMethodsArguments: trueparams: count=countSql

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>boot_recieve_data</artifactId><version>0.0.1-SNAPSHOT</version><name>boot_recieve_data</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version><mybatis-plus-boot-starter.version>3.3.2</mybatis-plus-boot-starter.version><druid.version>1.2.8</druid.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus-boot-starter.version}</version></dependency><!-- Mysql驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.46</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/java</directory><!--所在的目录--><includes><include>**/*.properties</include><!--包括.properties、.xml文件都会扫描到--><include>**/*.xml</include></includes><filtering> false </filtering></resource></resources></build></project>

Mybatis的5种分页方式相关推荐

  1. Mybatis的四种分页方式详解

    LIMIT关键字 mapper代码 <select id="selectByPageInfo" resultMap="BaseResult">sel ...

  2. Mybatis的两种分页方式:RowBounds和PageHelper

    原理:拦截器. RowBounds 在mapper.java中的方法中传入RowBounds对象. RowBounds rowBounds = new RowBounds(offset, page.g ...

  3. mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. import tk.mybatis.mapper.entity.Example;import com ...

  4. sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...

  5. oracle分页的三种方式,oracle 使用rownum的三种分页方式

    rownum是Oracle数据库中的一个特有关键字,返回的是一个数字代表记录的行号. 基础知识:rownum只能做 获取51到100的数据 三种分页的写法: 1.使用minus,原理就是查询出前100 ...

  6. 黑马博客——详细步骤(八)项目功能的实现之另一种分页方式【mongoose-sex-page】

    4.另一种分页方式:mongoose-sex-page(第三方模块) 上一页和下一页

  7. sql server和mysql 分页_基于Sql server数据库的四种分页方式总结

    下面小编就为大家分享一篇基于sqlserver的四种分页方式总结,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧. 第一种:ROW_NUMBER() OVER()方式 select * ...

  8. oracle中rownum的三种分页方式

    三种分页的写法: 1.使用minus,原理就是查询出前100行的数据 减去 查询出前50行的数据 1 2 3 select * from DATA_TABLE_SQL where rownum< ...

  9. Mybatis四种分页方式

    1.数组分页 查询出全部数据,然后再list中截取需要的部分. mybatis接口 List<Student> queryStudentsByArray(); xml配置文件 <se ...

最新文章

  1. 无人机航拍记录生活真爽,包邮送一个!
  2. 在Hinton看来是“宇宙答案”GPT-3,到LeCun这里却“对世界一无所知”
  3. [JavaScript]关于div的隐藏
  4. Node.js 使用webpack-dev-server工具运行项目实现自动打包编译的功能
  5. 豆瓣9.2!为什么这款剧最能打动大家?真相都在数据里!
  6. 2021-10-28嵌入式人工智能
  7. Shiro并发登录人数控制遇到的问题和解决
  8. phash图像识别应用
  9. 源码分析Dubbo服务提供者启动流程-上篇
  10. 中小企业信息管理 巧用E-Cell
  11. java 文件下载预览_javaweb简单的实现文件下载及预览
  12. 在Finder中显示隐藏文件
  13. FINALDATA 使用教程
  14. Python 批量合并 Excel工作簿
  15. ic 卡获取帐号apdu指令_发送获取银行卡卡号的APDU命令
  16. VSS(Visual SourceSafe)使用方法
  17. 3-Go并发编程与协程Goroutine
  18. 关于图文识别功能相关技术的大致实现
  19. 精读5G:关于5G的NSA和SA,看完秒懂!
  20. 有关智能操作系统的讨论

热门文章

  1. 根据一年的周数得到日期
  2. 梯度,sobel算子的理解
  3. 数字孪生技术海上风电场解决方案
  4. 中国软件行业待遇问题
  5. ERR_REQUIRE_ESM
  6. 半入耳蓝牙耳机评测,南卡和锤子真无线蓝牙耳机哪个更值得入手?
  7. 【mybatis】mybatis的工作原理
  8. 收集的一些GIS数据网站
  9. 集线器、交换机以及路由器异同 + 冲突域和广播域详解
  10. vue未登录跳转至登录页面