SpringBoot实现分页插件
- 格式:pdf
- 大小:343.63 KB
- 文档页数:2
pagehelper分页用法PageHelper是一个为了方便开发人员进行分页查询而提供的一个分页插件,它是在MyBatis的基础上进行封装的。
PageHelper可以用于任何Java项目,不仅仅局限于MyBatis。
PageHelper以其简单易用、功能强大的特点受到广大开发人员的喜爱。
PageHelper的使用非常简单,使用以下几个步骤即可实现分页查询。
1. 引入PageHelper依赖:在Maven项目的pom.xml文件中加入以下依赖:```<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version></dependency>```2. 配置PageHelper:在Spring Boot项目的配置文件application.properties中加入以下配置:```# 分页插件配置pagehelper.helper-dialect=mysqlpagehelper.reasonable=truepagehelper.support-methods-arguments=truepagehelper.params=count=countSql```3. 查询数据并进行分页:```java// 在需要分页查询的方法中加入以下代码PageHelper.startPage(pageNum, pageSize);List<User> userList = userDao.getUserList(); // 自定义方法,查询用户列表```在查询方法前调用PageHelper.startPage()方法指定当前页码和每页显示数量。
Java实现分页功能常见的⼏种⽅法⼀、limit关键字service层@Service@Transactionalpublic class ImplStudentService implements StudentService {@Resourceprivate StudentDao studentDao;@Overridepublic List<Student> selectAllStudent(String province, Integer offset, Integer limit) {return studentDao.selectAll(province,offset,limit);}}sql语句select * from student where province = #{province} limit #{offset},#{limit}⼆、hibernate分页service层@Overridepublic List getStudents(Integer pageNo,Integer pageSize) throws Exception {// 分页数据int[] startIdAndCount = new int[2];startIdAndCount[0] = pageNo * pageSize;startIdAndCount[1] = pageSize;return studentDao.selectStudentsByPage(startIdAndCount);}dao层@Overridepublic List findByHqlPage(int[] startIdAndCount) throws Exception {String hql = "...";try {Query query = getSession().createQuery(hql);// 设置分页if (startIdAndCount != null && startIdAndCount.length > 0) {int rowStartIdx = Math.max(0, startIdAndCount[0]);if (rowStartIdx > 0) {query.setFirstResult(rowStartIdx);// 设置开始取值的索引}if (startIdAndCount.length > 1) {int rowCount = Math.max(0, startIdAndCount[1]);if (rowCount > 0) {query.setMaxResults(rowCount);// 设置结束取值的索引}}}return query.list();} catch (RuntimeException re) {log.error("分页查询失败!", re);throw re;}}三、截取List查询结果分页(简单粗暴)...List<StudentEnroll> students = studentlDao.getAllStudents();int count = 0;if(studentEnrolls != null && studentEnrolls.size() > 0) {count = studentEnrolls.size();int fromIndex = pageNo * pageSize;int toIndex = (pageNo + 1) * pageSize;if(toIndex > count) {toIndex = count;}List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);...四、mybatis框架pageHelper插件分页Spring整合:导⼊pom.xml<!-- https:///artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>配置项⽬配置⽂件(我在spring和mybatis整合的配置⽂件中配置的,如果在mybatis核⼼配置⽂件中配置,百度⼀下) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 依赖数据源 --><property name="dataSource" ref="dataSource"/><!-- 注册加载myBatis映射⽂件 --><property name="mapperLocations"><array><value>classpath*:com/yyz/mapper/*Mapper.xml</value></array></property><!-- PageHelper分页配置 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使⽤下⾯的⽅式配置参数,⼀⾏配置⼀个,后⾯会有所有的参数介绍 --><value><!--helperDialect属性来指定分页插件使⽤哪种⽅⾔。
SpringBoot整合tk.mybatis及pageHelper分页插件及mybatis逆向⼯程Spring Boot整合druid数据源1)引⼊依赖<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>2)application.properties引⼊配置# datasource configspring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.druid.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8ername=rootspring.datasource.druid.password=123spring.datasource.druid.initial-size=5spring.datasource.druid.min-idle=5spring.datasource.druid.max-active=20spring.datasource.druid.test-on-borrow=true3)整合MyBatistk.mybatis是在MyBatis的基础上提供了很多⼯具,让开发更加⾼效添加依赖<!-- 整合tk.mybatis --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.2</version></dependency>application.properties中添加mybatis的配置mybatis.type-aliases-package=com.fei.entitymybatis.mapper-locations=classpath:mapper/*.xml创建通⽤的⽗级接⼝package tk.mybatis;import mon.Mapper;import mon.MySqlMapper;/*** ⾃⼰的Mapper,特别注意不能被扫描到,否则会出错* Created by zxf on 2019年10⽉16⽇*/public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T>{}4)整合PageHelper分页插件PageHelper是MyBatis的分页插件,⽀持多数据源,多数据库,可以简化数据库的分页查询操作,整合过程极其简单,只需要引⼊依赖即可。
oracle+mybatis-plus+springboot实现分页查询的实例今天蠢了⼀上午才弄出这玩意,话不多说上代码!1、建⼀个配置类package com.sie.demo.config;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/*** @author liaozhifeng* @date 2021/7/31 11:14* @Version 1.0*/@Configuration@ConditionalOnClass(value = {PaginationInterceptor.class})public class MybatisPlusConfig {// 最新版@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 数据库的配置DbType.ORACLE 根据⾃⼰的数据库选择interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));return interceptor;}}2、service层的代码package com.sie.demo.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import ers;import com.sie.demo.entity.vo.PageUserVo;import erMapper;import erService;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;import org.springframework.util.DigestUtils;import javax.annotation.Resource;import javax.servlet.http.HttpSession;import java.util.List;/*** @author liaozhifeng* @date 2021/7/27 14:03* @Version 1.0*/@Service@Slf4jpublic class UserServiceImpl extends ServiceImpl<UserMapper, Users> implements UserService {@ResourceUserMapper userMapper;/*** 分页查询⽤户* @param currentPage* @param pageSize* @return*/@Overridepublic PageUserVo selectAll(long currentPage, long pageSize) {IPage<Users> userPage = new Page<>(currentPage, pageSize);//参数⼀是当前页,参数⼆是每页个数IPage<Users> iPage = userMapper.selectPage(userPage, null);List<Users> list = iPage.getRecords();Long total = iPage.getTotal();PageUserVo pageUserVo = new PageUserVo(list, total);return pageUserVo;}}3、controller层 RetResult是我⾃⼰定义的⼀个统⼀返回的泛型对象package com.sie.demo.controller;import com.baomidou.mybatisplus.core.conditions.Wrapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.sie.demo.entity.RetCode;import com.sie.demo.entity.RetResponse;import com.sie.demo.entity.RetResult;import ers;import com.sie.demo.entity.vo.PageUserVo;import erServiceImpl;import com.sie.demo.util.TokenUtil;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.servlet.http.HttpSession;import java.util.List;@Controller@RestController@RequestMapping("user")@Slf4jpublic class UserController {@AutowiredUserServiceImpl userService;/***** @param currentPage* @param pageSize* @return*/@GetMapping("selectAll")public RetResult<PageUserVo> selectAll(long currentPage, long pageSize) {(currentPage+pageSize+"=========================");PageUserVo pageUserVo = userService.selectAll(currentPage,pageSize);return RetResponse.makeOKRsp(pageUserVo);}}到此这篇关于oracle+mybatis-plus+springboot实现分页查询的实例的⽂章就介绍到这了,更多相关 mybatis-plus springboot分页查询内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
pagehelper用法PageHelper是一个Mybatis的分页插件,它可以提供更加方便的分页功能。
PageHelper的功能包括:在不改变原有的sql语句的基础上,为查询结果分页,并自动计算出总页数和总记录数;自定义页码,例如设置最大页码和最小页码,以及如何处理空白页码等;支持主从库分离,自动路由到相应的数据源;支持偏移量、分页大小的参数自定义;支持多种数据库,包括MySQL、Oracle、SQLServer等;支持自定义插件,用于改变分页参数等。
PageHelper的使用十分简单,使用时只需要在Maven依赖中添加PageHelper插件:<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.13</version></dependency>在Mybatis的配置文件中加入插件:<plugins><plugininterceptor=com.github.pagehelper.PageInterceptor<property name=properties<value>dialect=mysql</value></property></plugin></plugins>在Mybatis的查询语句中,使用PageHelper.startPage()函数来进行数据库分页:PageHelper.startPage(pageNum, pageSize);List<Student> studentList = StudentMapper.selectAll(); PageHelper插件的灵活性以及强大的功能,使得它成为处理Mybatis的分页操作的首选插件。
pagehelper分页用法PageHelper是一个用于MyBatis分页插件,可以方便地对数据库进行分页查询操作。
它可以在使用MyBatis进行数据查询时,自动地根据用户的需求进行分页查询,并提供一系列的分页功能。
使用PageHelper插件首先需要引入相关依赖,可以在项目的pom.xml文件中添加以下依赖:```xml<dependency><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version></dependency>``````xml<plugins><property name="helperDialect" value="mysql"/></plugin></plugins>```在代码中使用PageHelper进行分页查询操作时,需要在查询方法之前调用静态方法`PageHelper.startPage(`进行分页设置,之后的数据库查询操作就会自动进行分页查询。
以下是PageHelper的一些常用方法和用法说明:2. `PageHelper.offsetPage(int start, int pageSize)`:设置起始偏移量和每页显示记录数,start表示起始偏移量,pageSize表示每页显示的记录数。
3. `PageHelper.orderBy(String orderBy)`:设置排序规则,orderBy表示排序字段和排序方式,例如:`"id desc"`表示按id字段降序排列。
4. `PageInfo<T> pageInfo = new PageInfo<>(List<T> list)`:将查询结果封装为PageInfo对象,可以通过该对象获取相关分页信息,例如总记录数、总页数等。
mybatis分页插件pagehelper原理MyBatis分页插件PageHelper原理1. 前言PageHelper是一款非常受欢迎的MyBatis分页插件,通过对MyBatis进行扩展,提供了简单易用的分页功能。
本文将从浅入深,逐步解释PageHelper的原理。
2. 为什么需要分页插件在处理大量数据时,如果不进行分页处理,一次性将所有数据加载到内存中会导致内存溢出的风险,同时也会导致查询速度变慢。
因此,分页是处理大量数据的常用方式,而PageHelper正是为了简化分页处理而开发的。
3. PageHelper的基本原理PageHelper的基本原理是通过MyBatis的拦截器机制,在sql执行前动态修改sql语句,同时加入分页相关的信息,从而实现分页功能。
具体流程如下:1.PageHelper首先会通过MyBatis的Interceptor拦截器截获Executor的执行过程。
2.通过反射获取到Executor中的MappedStatement对象,进而获取到当前执行的sql语句。
3.根据用户传入的参数,解析出分页相关的信息,如当前页码、每页显示数量等。
4.通过分页相关的信息,动态修改原始的sql语句,加入分页语句,如LIMIT或ROWNUM等。
5.执行修改后的sql语句,得到分页查询的结果。
6.将查询结果封装成Page对象,包含总记录数、总页数、当前页数据等信息,返回给调用者。
4. 使用PageHelper实现分页引入依赖首先需要在项目中引入PageHelper的依赖,可以通过在Maven的``文件中添加以下依赖:<dependency><groupId></groupId><artifactId>pagehelper-spring-boot-starter</artifact Id><version>最新版本</version></dependency>配置PageHelper在Spring Boot项目中,可以通过在配置文件中添加以下配置来启用PageHelper:mybatis:configuration:# PageHelper插件拦截器interceptors:使用PageHelper提供的方法在需要进行分页查询的Mapper接口中,可以直接使用PageHelper提供的方法进行分页查询,例如:import ;import ;public interface UserMapper {List<User> getUsers();// 分页查询用户列表default List<User> getUsersByPage(int pageNum, int p ageSize) {(pageNum, pageSize);List<User> users = getUsers();return new PageInfo<>(users).getList();}}通过对PageHelper的原理解析,我们可以了解到PageHelper是通过MyBatis拦截器实现的分页功能,可以简化分页查询的开发流程。
springboot整合mybatis-plus的两种分页查询⽅式--⾃定义的结果集分页返回浏览器⼀、⾸先是mybatis-plus⾃带的分页注意:下⾯的分页的页数和页⾯⼤⼩语句⼀定⼀定要写在select查询语句之前才能分页⽣效①② PageHelper.startPage(pNum,10);第⼀种⾃带分页⽅式:配置类添加:应⽤:⼆、返回的结果集如果不是直接从mappe直接查询出来的,⽽是经过add、get、set⼀些列操作之后再传给浏览器的话,⾃带的分页不能满⾜。
1.pomxml添加依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version></dependency>View Code2.application.yml配置#分页pageHelperpagehelper:helper-dialect: mysqlreasonable: truesupport-methods-arguments: true3. 基本的mapper、service、controller都和普通的⼀样。
controller接收浏览器请求-->调⽤service的抽象⽅法-->serviceImpl实现类去调⽤mapper查询sql得到集合重点在serviceImpl层进⾏分页:PageHelper.startPage(pNum,10); //这条语句必须在下⾯的查询或者⾃定义查询之前//⼀般都是mapper层的select操作;//如果想返回⾃定义集合,看下⾯PageInfo<AreaEuiqmentVO> pageInfo = new PageInfo<>(list1); //list1是我⾃定义的结果集,return pageInfo.getList();。
SpringBoot整合PageHelper实现分页查询功能详解前⾔本⽂介绍的是MyBatis 分页插件 PageHelper,如果你也在⽤ MyBatis,建议尝试该分页插件,这⼀定是最⽅便使⽤的分页插件。
分页插件⽀持任何复杂的单表、多表分页。
使⽤⽅法导⼊依赖在中央仓库中搜索pageHelper,找到pagehelper-spring-boot-starter可以⾃选版本,选择你所使⽤的依赖管理⼯具对应的依赖坐标,例如我⽤的依赖管理⼯具是Maven,那我就选择对应Maven的依赖坐标。
添加pagehelper-spring-boot-starter的Maven依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version></dependency>添加该依赖之后⽆需再添加MyBatis的依赖,因为该依赖默认依赖了MyBatis:编写配置⽂件使⽤yaml格式:pagehelper:helper-dialect: mysqlreasonable: truesupport-methods-arguments: trueparams: count=countSql使⽤properties格式:# 指定分页插件的⽅⾔pagehelper.helper-dialect=mysql# 分页合理化pagehelper.reasonable=true# ⽀持⽅法参数pagehelper.support-methods-arguments=true#配置参数映射pagehelper.params=count=countSql参数说明:可参考官⽅⽂档准备数据表准备Mapper接⼝测试查询全部数据运⾏结果:默认SQL语句就是查询全部数据PageHelper 分页查询使⽤PageHelper.startPage(pageNum,pageSize)⽅法来设置分页信息,分别是当前页数和每页显⽰的总记录数注意:必须在mapper接⼝中的⽅法执⾏之前设置该分页信息运⾏结果:PageHelper.startPage(pageNum,pageSize)⽅法只对后⾯⼀次查询⽣效下⾯有2次查询所有数据,第1次查询所有数据前插⼊了PageHelper.startPage(pageNum,pageSize)⽅法,所以第1次查询是分页查询,⽽第2次查询前没有插⼊PageHelper.startPage(pageNum,pageSize)⽅法,所以不是分页查询。
分页系统原理一、引言分页系统是指将一个大型的数据集合分成若干个小的部分,每个部分称为一页,以便于用户查看和操作。
在计算机领域中,分页系统被广泛应用于数据库、操作系统、网站等方面。
本文将详细介绍分页系统的原理及其实现方法。
二、分页系统的原理1. 数据集合的划分在使用分页系统时,首先需要将一个大型的数据集合按照一定规则进行划分。
常用的规则有按照时间、按照关键字等方式进行划分。
例如,在网站上展示新闻列表时,可以按照时间顺序将新闻列表进行划分。
2. 分页算法在对数据集合进行划分后,需要使用算法对数据进行处理。
常用的算法有基本算法和高级算法两种。
(1)基本算法基本算法是指最简单的数据处理方式,主要包括以下几种:① 静态数组:将所有数据存储在一个数组中,并根据需要截取其中一部分展示给用户。
② 动态数组:与静态数组相似,但可以根据需要动态扩展或缩小数组大小。
③ 链表:将所有数据存储在链表中,并根据需要截取其中一部分展示给用户。
(2)高级算法高级算法是指在基本算法的基础上,通过一些优化方式提高分页系统的效率。
常用的高级算法有以下几种:① 数据库分页:将数据存储在数据库中,并使用SQL语句进行分页处理。
② 索引分页:在数据集合中建立索引,根据索引进行数据分页。
③ 缓存分页:将数据缓存在内存中,根据需要从缓存中取出一部分展示给用户。
3. 分页显示在对数据进行划分和处理后,需要将处理后的数据展示给用户。
常用的方式有以下几种:(1)静态页面:将所有数据渲染到HTML页面中,并通过CSS样式进行排版和展示。
(2)动态页面:使用JavaScript等技术实现动态加载和渲染数据。
(3)AJAX技术:使用AJAX技术异步加载和渲染数据,提高用户体验。
4. 分页控件为了方便用户操作,常常需要提供一些控件来实现翻页、跳转等功能。
常用的控件有以下几种:(1)翻页按钮:提供上一页、下一页等按钮,方便用户翻阅数据。
(2)跳转输入框:允许用户输入要跳转到的页面编号或关键字。
实现分页插件的具体步骤:
1.导入jar包
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.(两种)在application.yml(propreties)文件加上
第一种:yml
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
第二种:propreties
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
3.在controller控制层编写代码
@GetMapping("/getAllPerson")
public String getAllPerson(Model model,@RequestParam(defaultValue="1",value ="pageNum") Integer pageNum,
String singleName){
PageHelper.startPage(pageNum,2); //设置当前页码,每页的行数
List<Tabulation>list=aaService.getAllPerson(singleName); //查询的集合
PageInfo<Tabulation>pageInfo=new PageInfo<Tabulation>(list); //把查询的集合放入pageInfo返回给页面
model.addAttribute("pageInfo",pageInfo);
model.addAttribute("name",singleName);
return"index";
}
4.编写页面
<p>当前<span th:text="${pageInfo.pageNum}"></span>页,总<span
th:text="${pageInfo.pages}"></span>页,共<span th:text="${pageInfo.total}"></span>条记录</p>
<a th:href="@{/getAllPerson}">首页</a>
<a th:href="@{/getAllPerson(pageNum=${pageInfo.hasPreviousPage}?
${pageInfo.prePage}:1)}">上一页</a>
<a th:href="@{/getAllPerson(pageNum=${pageInfo.hasNextPage}?
${pageInfo.nextPage}:${pageInfo.pages})}">下一页</a>
<a th:href="@{/getAllPerson(pageNum=${pageInfo.pages})}">尾页</a>
5.运行
总结
使用分页插件无需创建page类,也不用在查询语句中写limit。