SpringBoot + MyBatist + Oracle +PageHelper 实现分页功能

2023-10-29

SpringBoot 项目pom.xml 依赖配置文件:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zzg</groupId>
	<artifactId>migrate</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.18.RELEASE</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<encoding>UTF-8</encoding>
		<java.version>1.8</java.version>
		<commons-lang.version>2.6</commons-lang.version>
		<commons-codec.version>1.10</commons-codec.version>
		<commons-lang3.version>3.9</commons-lang3.version>
		<commons-net.version>3.6</commons-net.version>
		<commons-io.version>2.6</commons-io.version>
		<commons-collections.version>3.2.1</commons-collections.version>
		<commons-text.version>1.8</commons-text.version>
		<oracle.version>1.0</oracle.version>
		<mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
		<com.alibaba.druid.version>1.1.10</com.alibaba.druid.version>
	</properties>

	<dependencies>
		<!--web 模块依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--web 单元测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- apache common 模块 -->
		<!--commons-lang3 工具包 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${commons-lang3.version}</version>
		</dependency>
		<!--commons-codec 加密工具包 -->
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>${commons-codec.version}</version>
		</dependency>
		<!--commons-net 网络工具包 -->
		<dependency>
			<groupId>commons-net</groupId>
			<artifactId>commons-net</artifactId>
			<version>${commons-net.version}</version>
		</dependency>
		<!--common-io 工具包 -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>${commons-io.version}</version>
		</dependency>
		<!--common-collection 工具包 -->
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>${commons-collections.version}</version>
		</dependency>
		<!-- common-text 工具包 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-text</artifactId>
			<version>${commons-text.version}</version>
		</dependency>
		<!-- springboot整合mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>${mybatis-spring-boot-starter.version}</version>
		</dependency>
		<!-- oracle驱动 -->
		<dependency>
 			<groupId>com.oracle</groupId>
  			<artifactId>ojdbc6</artifactId>
  			<version>${oracle.version}</version>
		</dependency>
		<!-- alibaba druid 数据库连接池  -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>${com.alibaba.druid.version}</version>
		</dependency>
		<!-- PageHelp  -->
         <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!-- 集成Servlet-api 模块  -->
        <dependency> 
		   <groupId>javax.servlet</groupId> 
		   <artifactId>servlet-api</artifactId> 
		   <version>2.5</version> 
		   <scope>provided</scope> 
		</dependency> 
	</dependencies>

</project>

SpringBoot 项目结构截图:

实现PageHelper 分页详细步骤

步骤一:pom.xml 文件添加如下配置:

<!-- PageHelp  -->
         <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>

步骤二:实列化PageHelper对象,方式分为两种:第一种:通过application.properties 文件方式,第二种:通过@Configuration配置标签,实列化PageHelper对象(推荐第二种方式)

第一种实现方式:

在application.properties 配置文件中添加如下配置:

#pagehelper分页插件配置
pagehelper.helperDialect=Oracle
pagehelper.reasonable=true
pagehelper.offsetAsPageNum=true
pagehelper.rowBoundsWithCount=true

 

第二种实现方式:

package com.zzg.configuration;

import java.util.Properties;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.github.pagehelper.PageHelper;

/**
 * 分页配置对象
 * @author zzg
 *
 */
@Configuration
public class PageHelperConfiguration {
	/**
	 * 分页对象实列化
	 * @return
	 */
	@Bean
	public PageHelper pageHelper() {
		PageHelper pageHelper = new PageHelper();
		Properties p = new Properties();
		p.setProperty("offsetAsPageNum", "true");
		p.setProperty("rowBoundsWithCount", "true");
		p.setProperty("reasonable", "true");
		p.setProperty("dialect", "Oracle");
		pageHelper.setProperties(p);
		return pageHelper;
	}
}

注意:pagehelper.helperDialect=oracle ,指定数据库类型,PageHelper 支持数据库标识符如下: Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL  (温馨提示:不区分大小写)

步骤三:SpringBoot 封装PageHelper 分页功能

service接口定义:

package com.zzg.service;

import java.util.Map;


import com.zzg.common.BaseService;
import com.zzg.common.entity.PageDate;
import com.zzg.common.entity.PageParam;
import com.zzg.entity.ErmsGuideProjBaseInfo;

public interface ErmsGuideProjBaseInfoService extends BaseService<ErmsGuideProjBaseInfo> {
	/**
	 * 自定义分页
	 * @param parame
	 * @param rb
	 * @return
	 */
	public PageDate<ErmsGuideProjBaseInfo> selectPage(Map<String, Object> parame, PageParam rb);
}

 service接口实现定义:

package com.zzg.service.impl;

import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zzg.common.AbstractService;
import com.zzg.common.entity.PageDate;
import com.zzg.common.entity.PageParam;
import com.zzg.entity.ErmsGuideProjBaseInfo;
import com.zzg.mapper.ErmsGuideProjBaseInfoMapper;
import com.zzg.service.ErmsGuideProjBaseInfoService;

@Service
public class ErmsGuideProjBaseInfoServiceImpl extends AbstractService<ErmsGuideProjBaseInfo> implements ErmsGuideProjBaseInfoService {
	@Autowired
	ErmsGuideProjBaseInfoMapper mapper;
	@Override
	@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
	public int insert(ErmsGuideProjBaseInfo record) {
		// TODO Auto-generated method stub
		return mapper.insert(record);
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
	public int insertSelective(ErmsGuideProjBaseInfo record) {
		// TODO Auto-generated method stub
		return mapper.insertSelective(record);
	}

	@Override
	public ErmsGuideProjBaseInfo selectByPrimaryKey(Long sid) {
		// TODO Auto-generated method stub
		return mapper.selectByPrimaryKey(sid);
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
	public int updateByPrimaryKeySelective(ErmsGuideProjBaseInfo record) {
		// TODO Auto-generated method stub
		return mapper.updateByPrimaryKeySelective(record);
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
	public int updateByPrimaryKey(ErmsGuideProjBaseInfo record) {
		// TODO Auto-generated method stub
		return mapper.updateByPrimaryKey(record);
	}

	@Override
	public PageDate<ErmsGuideProjBaseInfo> selectPage(Map<String, Object> parame, PageParam rb) {
		// TODO Auto-generated method stub
		PageHelper.startPage(rb.getPageNo(), rb.getLimit());
		List<ErmsGuideProjBaseInfo> rs = mapper.select(parame);
		PageInfo<ErmsGuideProjBaseInfo> pageInfo = new PageInfo<ErmsGuideProjBaseInfo>(rs);
		return super.page(pageInfo.getList(), pageInfo.getPageNum(), pageInfo.getPageSize(), pageInfo.getTotal());
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
	public void deleteByPrimaryKey(Long sid) {
		// TODO Auto-generated method stub
		mapper.deleteByPrimaryKey(sid);
		//模拟事务失败处理
		int a = 10/0;
	}

}

controller 调用:

@RequestMapping("/selectPage")
	@ResponseBody
	public Result selectAll(HttpServletRequest request) {
		log.warn("执行分页查询");
		PageParam rb = super.initPageBounds(request);
		Map<String,Object> parameter = new HashMap<String,Object>();
		PageDate<ErmsGuideProjBaseInfo> list = ermsGuideProjBaseInfoService.selectPage(parameter, rb);
		return Result.ok().setData(list);
	}

效果截图:

分页功能公共类封装:

自定义分页对象:PageDate<T>.java

package com.zzg.common.entity;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义分页实体对象
 * @author zzg
 *
 * @param <T>
 */
public class PageDate<T> implements java.io.Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 6552522645407013282L;
	private int pageNum; // 当前页
	private int pageSize;// 每页数量
	private long totalCount;// 总条数
	private int totalPageNum;// 总页数
	private List<T> data;// 当前页返回数据
	
	public int getPageNum() {
		return pageNum;
	}
	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public long getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(long totalCount) {
		this.totalCount = totalCount;
	}
	public int getTotalPageNum() {
		return totalPageNum;
	}
	public void setTotalPageNum(int totalPageNum) {
		this.totalPageNum = totalPageNum;
	}
	public List<T> getData() {
		return data;
	}
	public void setData(List<T> data) {
		this.data = data;
	}
	public PageDate(){
		data = new ArrayList<>();
	}
	
}

自定义分页请求参数:PageParam.java

package com.zzg.common.entity;

public class PageParam implements java.io.Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -6546262537179268627L;

	public PageParam(int pageNo, int limit){
		this.pageNo = pageNo;
		this.limit = limit;
	}
	
	
	// 一页显示的记录数
    /** The limit. */
    private int limit;
    // 当前页码
    /** The page no. */
    private int pageNo;
    
	public int getLimit() {
		return limit;
	}
	public void setLimit(int limit) {
		this.limit = limit;
	}
	public int getPageNo() {
		return pageNo;
	}
	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
}

抽象公共方法,实现PageInfo 分页转换为自定义分页对象PageDate<T>  

AbstractService<T>.java

package com.zzg.common;

import java.util.List;

import com.zzg.common.entity.PageDate;

/**
 * 公共服务之分页服务接口
 * @author zzg
 *
 * @param <T>
 */
public abstract class AbstractService<T> {
	/**
	 * 分页抽象服务方法
	 * @param list
	 * @param pageNum
	 * @param pageSize
	 * @param totla
	 * @return
	 */
	public PageDate<T> page(List<T> list,Integer pageNum, Integer pageSize, Long totla){
		PageDate<T> page = new PageDate<T>();		
		page.setData(list);
		page.setPageNum(pageNum);
		page.setPageSize(pageSize);
		page.setTotalCount(totla);
		return page;
	}
}

抽象公共方法,实现HTTP请求转换为分页参数PageParam

AbstractController.java

package com.zzg.common;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.SimpleTypeConverter;

import com.zzg.common.constant.WebAppConstants;
import com.zzg.common.entity.PageParam;

public abstract class AbstractController {
	/**
	 * 参数分页参数转换校验:现在仅支持:get请求、参数格式:?page=1&limit=10
	 * 
	 * @param param
	 * @return
	 */
	protected PageParam initPageBounds(HttpServletRequest request) {
		SimpleTypeConverter converter = new SimpleTypeConverter();
		// 页码、分页大小初始化设置值
		int page = 1;
		int limit = 10;
		if(StringUtils.isNotEmpty(request.getParameter(WebAppConstants.PAGE))){
			page = converter.convertIfNecessary(request.getParameter(WebAppConstants.PAGE), int.class);
		}
		if(StringUtils.isNotEmpty(request.getParameter(WebAppConstants.LIMIT))){
			limit = converter.convertIfNecessary(request.getParameter(WebAppConstants.LIMIT), int.class);
		}
		PageParam pb = new PageParam(page, limit);         
		return pb;
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot + MyBatist + Oracle +PageHelper 实现分页功能 的相关文章

随机推荐

  • 聚类算法——KMeans算法(机器学习)

    KMeans算法 一 输入参数 n clusters 数据集将被划分成 n clusters个 簇 即k值以及 int optional default 8 一般需要选取多个k值进行运算 并用评估标准判断所选k值的好坏 以获得较好的聚类效果
  • 基于消息中间件解决分布式事务的开源框架Myth

    基于消息中间件的解决分布式事务框架 https github com yu199195 myth 1 rpc框架支持 dubbo motan springcloud 2 消息中间件支持 jms activimq amqp rabbitmq
  • uboot启动——lowlevel_init函数详解

    1 将lr寄存器中的值压栈 push lr lr寄存器保存的是函数返回地址 每个模式下只有一个lr寄存器 如果涉及多重函数调用 则lr寄存器会被覆盖 导致返回地址丢失 在之前已经初始化栈 所以这里可以将lr寄存器压栈 将来函数返回的时候再弹
  • 【网络】初识网络

    Linux初识网络 文章目录 Linux初识网络 网络 协议 协议分层 OSI七层模型 TCP IP五层 四层 模型 网络传输基本流程 数据包封装和分用 网络中的地址管理 IP地址 MAC地址 网络 协议 协议 是一种约定 计算机之间的传输
  • 基于YOLOv3算法的交通标志识别系统实现流程(个人学习笔记,仅当参考!!)

    总流程 安装darknet 本文利用linux操作系统上安装的Darknet开源轻型深度学习框架 为了提高训练速度利用CUDA和OPENCV 进行编译 完成对YOLO v3算法LISA数据集中四类不同的交通标志的训练及测试 实现对视频中运动
  • C#开发环境准备

    开发准备 1 安装visual studio code vscode 2 然后vscode的插件库安装 C Dev Kit 该插件会自动安装 C extension 和 IntelliCode for C Dev Kit 该插件需要安装 N
  • BeautifulSoup库的基本使用

    BeautifulSoup库的基本使用 1 库的基本使用 1 1 安装库 1 2 导入库 1 3 不同文件操作 2 获取html结构化数据 3 节点操作 3 1 获取子节点 3 2 获取节点内容 3 2 1 单个内容 3 2 2 多个内容
  • 华为OD机试真题 Java 实现【最多几个直角三角形】【2023Q1 100分】

    一 题目描述 有 N 条线段 长度分别为 a 1 a n 现要求你计算这 N 条线段最多可以组合成几个直角三角形 每条线段只能使用一次 每个三角形包含三条线段 二 输入描述 第一行输入一个正整数 T 1 lt T lt 100 表示有组测试
  • 多线程实现一分钟插入1000万条数据

    首先我们需要建立一个线程类 继承Thread类 并实现run方法 1 获取数据库连接 2 编写插入的sql语句 3 关闭自动提交 conn setAutoCommit false 4 编写for循环 跟着那个的插入方法一样 5 将注入的信息
  • L1-025 正整数A+B(java)

    1 题目详情 题的目标很简单 就是求两个正整数A和B的和 其中A和B都在区间 1 1000 稍微有点麻烦的是 输入并不保证是两个正整数 输入格式 输入在一行给出A和B 其间以空格分开 问题是A和B不一定是满足要求的正整数 有时候可能是超出范
  • 历史辩证唯物主义下的金融业发展的思考*

    历史辩证唯物主义下的金融业发展的思考 摘要 从历史唯物主义的角度来 金融是人类生产力发展到一定阶段的产物 金为黄金 融意味着分开流通之意 金融不是纯主观知识体系 而是基于客观经济规律的产物 是在不断的金融创新和协调金融风险的矛盾中逐渐完善
  • YOLOv5区域入侵检测【附完整代码以及视频演示】

    一 前期准备 首先你需要有一份yolov5的官方源码 并且能够找到其中的detect py文件即可 在检测过程中 有些项目不需要我们检测所有的区域 比如禁止区域的入侵检测 只需要检测制定规划出来的区域就可以 例如下图所示这样 在网上随便找的
  • 【word】使用VBA代码,自定义页面数拆分大Word文件为多个小文档并指定名称保存

    使用VBA代码 自定义页面数拆分大Word文件为多个小文档并指定名称保存 alt F11打开开发选项 gt 选择 插入 gt 模块 gt 弹出代码编辑窗口 插入下面代码 按照需要修改页数和要重命名的每个文档按顺序的名字 gt 按F5运行代码
  • 利用Qt Assistant 定制帮助文档

    为了将Qt Assistant定制为自己应用程序的帮助文档浏览器 需要完成以下几步 一 导入HTML格式的帮助文档 1 首先 针对自己的应用程序创建HTML格式的帮助文档 请参见 Doxygen生成HTML文件 下面示例假设HTML文件已经
  • 迷你世界物品查询代码lua

    迷你世界物品查询 local A local B local n 0 local s 0 local function add2 for j 1 500 do 等待1秒 threadpool wait 2 i n 1 500 j local
  • 刷脸支付数据积累价值将超越支付服务本身

    产业生态圈的角度来看 支付服务和在此基础之上所延伸出的产业支付生态 未来都将成为各个生态圈的基础设施 未来 随着产业数字化转型深入 某一场景下的终端客户 内部经营管理 上下游供应商等要逐步实现在线化 在这一过程中 产业各方参与者需要链接 支
  • 关于Unity启动时间过长(启动黑屏时间长)的问题

    好吧 Unity启动确实比其他引擎生成的游戏包慢些 关键是你启动的时候还要等上一段时间才显示Splash那个logo图 最近项目有个蛋疼得需求 需要在启动界面加进度帧动画 我也是醉了 刚开始的思路 用Unity单独做个启动场景 让Splas
  • R语言找不到文件或目录:无法打开文件

    R语言找不到文件或目录 无法打开文件 在R语言中 有时候你可能会遇到一个常见的错误消息 无法打开文件 No such file or directory 找不到文件或目录 这个错误消息通常表示你尝试在R环境中读取或写入一个不存在的文件或目录
  • 【OpenCV】OpenCV实战从入门到精通之 -- 离散傅里叶变换相关函数详解

    目录 1 dft 函数 2 返回DFT最优尺寸大小 getOptimalDFTSize 函数 3 扩充图像边界 copyMakeBorder 函数 4 计算二维矢量的幅值 magnitude 函数 6 矩阵归一化 normalize 函数
  • SpringBoot + MyBatist + Oracle +PageHelper 实现分页功能

    SpringBoot 项目pom xml 依赖配置文件