本案例以上一章Spring整个MyBatis案例为基础

集合分页(未使用SQL分页:假分页)

原理:在进行sql查询时一次性查找到所有数据保存在list中,再使用subList获取满足条件的记录。这种方法也被称为假分页。
此方法适用于数据量较少的情况下,当数据量数据量较大时会影响数据库以及服务器的性能。
本案例附带条件查询,模糊查询为例

StudentMapper接口中定义page方法

/*** * @param student* @return*/
List<Student> page(Student student);

StudentMapper.xml映射文件中实现

<select id="page" parameterType="student" resultType="student">select  student_id studentId,name studentName,age,grade_id gradeIdfrom `student` <where><if test="studentId!=null">and student_id=#{studentId}</if><if test="studentName!=null">and `name` like '%${studentName}%'</if></where>
</select>

新建StudentService业务层

@Service
public class StudentService {@Autowiredprivate StudentMapper studetnMapper;public List<Student> page(Student student,int currentPage,int pageSize){List<Student> students=studetnMapper.page(student);//通过得到集合中指定的元素来实现分页return students.subList((currentPage-1)*pageSize, pageSize);}
}

测试:

@Test
public void testPage(){ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");StudentService stuService=ctx.getBean("studentService",StudentService.class);List<Student> stus=stuService.page(new Student(), 1, 2);System.out.println(stus);
}

测试结果,从第1条开始输出了2条:

[Student [studentId=1, studentName=张三, age=12, gradeId=1], Student [studentId=2, studentName=李四, age=12, gradeId=2]]

SQL分页(真分页)

使用SQL分页需要传本来需要的条件参数Student与分页参数currentPage和pageSize,这里为了在映射文件中做处理,我们传入一个map集合作为参数,首先修改StudentMapper接口中的方法:

/*** @param map* @return*/
List<Student> page(Map<String,Object> map);

然后修改mapper.xml映射文件:

<select id="page" parameterType="map" resultType="student">
select  student_id studentId,name studentName,age,grade_id gradeIdfrom `student` <where><if test="student.studentId!=null">and student_id=#{student.studentId}</if><if test="student.studentName!=null">and `name` like '%${student.studentName}%'</if></where>limit #{fromIndex},#{pageSize}
</select>

修改业务层代码,在业务层做分页参数的处理:

public List<Student> page(Student student,int currentPage,int pageSize){Map<String, Object> map=new HashMap<String, Object>();map.put("fromIndex", (currentPage-1)*pageSize);map.put("pageSize", pageSize);map.put("student", student);List<Student> students=studetnMapper.page(map);//通过得到集合中指定的元素来实现分页return students;
}

测试上述方法,结果一样。
此方法实现了要求,获取到了指定的数据,但是每次在分页时都需要编写limit语句,不方便统一管理,维护性较差。所以我们可以使用更方便的分页实现。


使用拦截器实现分页

–暂略

使用RowBounds分页

–暂略

MyBatis实现分页相关推荐

  1. SpringBoot集成MyBatis的分页插件PageHelper

    [写在前面] 项目的后台管理系统需要展示所有资源信息,select * 虽然方便但数据量过于庞大会严重降低查找效率,页面加载慢,用户体验差.分页自然是必要选择,但原生的方法过于繁杂.MyBatis的分 ...

  2. Springboot+Mybatis+PageHelper 分页、排序

    Springboot+Mybatis+PageHelper 分页.排序 升序 asc.降序 desc <!-- 继承 spring boot 父包--><parent>< ...

  3. 智能一代云平台(三十一):mybatis加入分页

    [前言] 在<智能一代云平台(三十):逆向工程生成mybatis>已经将mybatis的逆向工程搞定了:但是美中不足的是mybatis的分页查询:接下来一起来探索一下分页查询. [分页查询 ...

  4. Spring Boot2.0 整合mybatis、分页插件、druid

    2019独角兽企业重金招聘Python工程师标准>>> 前言 本文主要是针对SpringBoot2.0.2版本,实现整合mybatis.分页插件.druid等组件,实现完整的web服 ...

  5. SpringBoot集成MyBatis的分页插件PageHelper(回头草)

    俗话说:好?不吃回头草,但是在这里我建议不管你是好马还是不好马,都来吃吃,带你复习一下分页插件PageHelper. 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心 ...

  6. 使用mybatis框架分页插件报错### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax;

    报错信息如下: ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the ...

  7. mybatis常用分页插件,快速分页处理

    在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程, ...

  8. Java 逻辑分页 和 物理分页(mybatis的分页插件PageHelper)

    目录 1 逻辑分页和物理分页的区别 2 项目框架展示 2.1 相关技术 2.2 相关依赖和配置 2.2.1 pom依赖 2.2.2 yml配置 2.3 实体类 3 逻辑分页 3.1 Sevice层 3 ...

  9. mybatis常见分页技术和自定义分页原理实战

    文章目录 前言 mybatis简单了解 分页类型 分页方式 1.数组分页 2.数据库分页 3.Rowbounds分页 4.自定义插件分页 自定义分页原理 自定义分页实战 聊下第三方分页插件 pageH ...

  10. spring boot集成mybatis-plus——Mybatis Plus 分页查询数据(图解)

    Mybatis Plus 分页查询数据(图解)  更新时间 2023-01-01 11:58:32 大家好,我是小哈. 本小节中,我们将学习如何通过 Mybatis Plus 分页查询数据库表中的数据 ...

最新文章

  1. iOS NSObject对象内存大小
  2. goaheadlinux移植_Linux下goahead3.3.6的移植以及文件上传下载示例
  3. java面对对象 关键字this super
  4. (五)Netty之Selector选择器
  5. OpenCV系列(一)之图像平滑
  6. INSTALL_FAILED_INVALID_APK: Split lib_slice_X_apk was defined multiple times异常
  7. Selective Search for Object Recognition解读
  8. [云计算] 001.云计算简介
  9. python 优先队列_Python Queue队列实现线程通信
  10. Web前端框架(JavaScript,CSS)、html组件、CSS规范与第三方库
  11. 2021-0415梦笔记
  12. 在线教学质量评价系统java web_基于JavaWeb的教师教学质量评价系统
  13. 3dsmax动画六、骨骼调整及蒙皮。
  14. 干货|6个职场常用Excel技巧,千万不要错过呦!
  15. 卸载精灵(bue directx) r4.0 完美版 绿色
  16. C# 版 flvmerge:快速合并多个flv文件
  17. 软件工程课程设计分组与选题名单
  18. IOS13图标尺寸_7大原则,带你设计出更优秀的图标
  19. bzoj5148:[BeiJing2018]Kakuro
  20. 立象Argox CP-2140E 打印机驱动

热门文章

  1. android 调用线程方法,Android使用线程获取网络图片的方法
  2. java.util.function包下的四大Function
  3. Codeforces Round #129 (Div. 1)E. Little Elephant and Strings
  4. 现代软件工程 第一周博客作业
  5. 接口”安全机制”的设计
  6. ▲数据结构 【2012】五2 C++版
  7. stylesheettheme和 theme 的区别
  8. android edittext不可复制_【EditText】Android设置EditText不可编辑 | 学步园
  9. Git操作的基本命令
  10. DMA内存申请--dma_alloc_coherent 及 寄存器与内存【转】