MyBatis分页插件PageHelper的使用及特殊字符的处理
目录
一、PageHelper简介
1.什么是分页
2.PageHelper是什么
3.使用PageHelper的优点
二、PageHelper插件的使用
原生limit查询
1. 导入pom依赖
2. Mybatis.cfg.xml 配置拦截器
3. 使用PageHelper进行分页
三、特殊字符的处理
1.SQL注入:
2.XML转义:
3.使用CDATA 区段
一、PageHelper简介
1.什么是分页
分页是一种数据展示技术,用于将大量数据分成若干页显示,每页显示指定数量的数据,以提高用户体验和数据浏览的效率。当数据量很大时,一次性将所有数据加载到页面上可能会导致页面加载缓慢,甚至使浏览器崩溃。而使用分页的方式,可以将数据划分成多个页面,只加载当前页的数据,避免了因数据量过大而导致的性能问题。
分页通常在网页应用程序中使用得较多,例如电商网站的商品列表、新闻网站的文章列表等。用户可以通过翻页或点击页码来切换不同的页面,从而浏览更多的数据。
2.PageHelper是什么
PageHelper是一个开源的Java分页插件,它可以帮助我们在数据库查询中实现分页功能。在传统的数据库查询中,我们需要手动编写SQL语句来实现分页,而PageHelper可以简化这个过程。 使用PageHelper,我们只需要在查询方法中添加少量的代码,就可以实现分页功能。它可以自动解析我们的查询语句,并根据我们指定的页码和每页显示的数量来生成相应的分页SQL语句。同时,PageHelper还提供了一些其他的功能,比如排序、统计等。
3.使用PageHelper的优点
1. 简单易用:PageHelper提供了简洁的API,使用起来非常方便。只需要在查询方法中添加少量的代码,就可以实现分页功能,无需手动编写复杂的分页SQL语句。
2. 兼容性强:PageHelper支持多种数据库,包括MySQL、Oracle、SQL Server等常见的数据库。无论你使用哪种数据库,都可以轻松地集成和使用PageHelper。
3. 功能丰富:除了基本的分页功能,PageHelper还提供了其他实用的功能,比如排序、统计等。你可以根据自己的需求灵活地使用这些功能,提高查询的灵活性和效率。
4. 性能优化:PageHelper在分页查询时,会自动优化SQL语句,减少数据库的查询开销。它会根据查询的条件和分页的设置,生成最优化的SQL语句,提高查询的性能。
5. 开源免费:PageHelper是一个开源的项目,可以免费使用。你可以在项目中直接引入PageHelper的依赖,无需额外的费用。
二、PageHelper插件的使用
原生limit查询
<select id="selectByLikeBname" resultMap="BaseResultMap" resultType="java.util.Map">select<include refid="Base_Column_List"/>from t_mvc_bookwhere bname like #{bname} limit #{start},#{end}</select>
上述可以看到我们可以根据MySQL中的limit关键字进行分页查询,这样也是可以的。但是当需求过大,表过多的情况下,我们又通过逆向工程生成mapper,那么对于每张表分页问题就不好解决了,还需要每次传入的start页码和end条目,那将会显得相当繁琐。
接下来将给大家介绍pageHelper分页插件的使用
1. 导入pom依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency>
2. Mybatis.cfg.xml 配置拦截器
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"/></plugins>
必须配置在environments上面,它受dtd约束影响,否则会报错

3. 使用PageHelper进行分页
以书籍表为例:
BookMapper.xml
<select id="selectByBname" resultType="com.ctb.model.Book" parameterType="java.lang.String">select<include refid="Base_Column_List"/>from t_mvc_bookwhere bname like concat('%',#{bname},'%')</select>
BookMapper.java
List<Book> selectByBname(@Param("bname")String bname);
bookBiz.java
List<Book> selectByBname(@Param("bname")String bname);
bookBizImpl.java
@Overridepublic List<Book> selectByBname(String bname, PageBean pageBean) {if (pageBean!=null && pageBean.isPagination()){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());}List<Book> books = bookBiz.selectByBname(bname);if (pageBean!=null && pageBean.isPagination()){PageInfo<Book> info = new PageInfo<>(books);pageBean.setTotal((int)info.getTotal());System.out.println("当前页:"+info.getPageNum()+"展示记录数:"+info.getPageSize()+"符合查询条件的总记录数:"+info.getTotal());}return books;}
测试类
@Testpublic void testBname(){PageBean pageBean=new PageBean();pageBean.setPage(1);pageBean.setRows(15);bookBiz.selectByBname("圣墟",pageBean).forEach(System.out::println);}
测试结果

注: 这里也是引用了之前的一个工具类--PageBean
工具类实现分页的要素:
-
每页显示的数据量:决定每页显示多少条数据,根据用户需求和系统性能进行设定。
-
当前页码:表示用户当前所处的页码。一般情况下,我们使用数字或者页码链接来显示当前页。
-
总记录数:表示数据总共有多少条。
-
总页数:根据总记录数和每页显示的数据量计算出的总页数。
三、特殊字符的处理
1.SQL注入:
为了防止SQL注入攻击,我们需要对特殊字符进行转义或者使用参数绑定。在使用MyBatis进行数据库查询时,应该尽量使用参数绑定,而不是直接拼接SQL语句。参数绑定可以通过使用#{}或${}来实现。其中,#{}会将参数值转义后作为预编译参数传递给数据库,而${}则会直接将参数值拼接到SQL语句中,所以在使用${}时需要特别注意防止SQL注入。
2.XML转义:
在MyBatis的XML配置文件中,如果我们需要在SQL语句中使用特殊字符(如<、>、&等),需要进行XML转义,以避免解析错误。常见的转义字符如下:
| 特殊字符 | 转义字符 |
|---|---|
| < | < |
| > | > |
| & | & |
| " | " |
| ’ | ' |
| <= | <= |
| >= | >= |
示例
<select id="queryminmax" resultType="com.ctb.model.Book" parameterType="com.ctb.dto.BookDto">select<include refid="Base_Column_List"/>from t_mvc_bookwhere price > #{min} and price < #{max}</select>
3.使用CDATA 区段
<![CDATA[ ]]>是xml语法,在<![CDATA[ ]]>内部的所有内容都会被解析器忽略,不进行转义。CDATA区段可以用来包含一些特殊字符或标记,而不会被XML解析器解析。
| 特殊字符 | <![CDATA[ ]]> |
|---|---|
| < | <![CDATA[<]]> |
| > | <![CDATA[>]]> |
| & | <![CDATA[&]]> |
| " | <![CDATA["]]> |
| ’ | <![CDATA[']]> |
| <= | <![CDATA[<=]]> |
| >= | <![CDATA[>=]]> |
| != | <![CDATA[!=]]> |
<select id="queryminmax" resultType="com.ctb.model.Book" parameterType="com.ctb.dto.BookDto">select<include refid="Base_Column_List"/>from t_mvc_bookwhere <![CDATA[price < #{max} and price >#{min}]]></select>
两者测试结果一致 ---最常用的是CDATA

MyBatis分页插件PageHelper的使用及特殊字符的处理到这就结束啦!!😊
祝各位友友们身体健康,工作顺利!!
相关文章:
MyBatis分页插件PageHelper的使用及特殊字符的处理
目录 一、PageHelper简介 1.什么是分页 2.PageHelper是什么 3.使用PageHelper的优点 二、PageHelper插件的使用 原生limit查询 1. 导入pom依赖 2. Mybatis.cfg.xml 配置拦截器 3. 使用PageHelper进行分页 三、特殊字符的处理 1.SQL注入: 2.XML转义&#…...
[语音识别] 基于Python构建简易的音频录制与语音识别应用
语音识别技术的快速发展为实现更多智能化应用提供了无限可能。本文旨在介绍一个基于Python实现的简易音频录制与语音识别应用。文章简要介绍相关技术的应用,重点放在音频录制方面,而语音识别则关注于调用相关的语音识别库。本文将首先概述一些音频基础概…...
Matlab彩色图像转索引图像
索引图像 索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像包括一个数据矩阵X,一个调色板矩阵map,也称为颜色映像矩阵。其中,数据矩阵X可以是8位无符号整型、16位无符号整型或双精度类型。调色板矩阵map是一个m3的数据阵列&…...
测试框架pytest教程(11)-pytestAPI
常量 pytest.__version__ #输出pytest版本 pytest.version_tuple #输出版本的元组形式 功能 pytest.approx pytest.approx 是一个用于进行数值近似比较的 pytest 断言工具。 在测试中,有时候需要对浮点数或其他具有小数部分的数值进行比较。然而,由于…...
Docker自学:利用FastAPI建立一个简单的web app
环境配置:下载Docker Desktop 文件一:main.py from typing import Unionfrom fastapi import FastAPIimport uvicornapp FastAPI()app.get("/") def read_root():return {"Hello": "World"}app.get("/items/{item…...
微调bert做学术论文分类(以科大讯飞学术论文分类挑战赛为例)
代码 12-How to Fine-Tune BERT for Text Classification:链接:https://pan.baidu.com/s/1EKggbyC4ZW-ufnDW45eKzA 提取码:k3b2 baseline 链接:https://pan.baidu.com/s/12hkZNJjQ__FGAHiF3fifvQ 提取码:88tb 数据…...
Springboot中sharding-jdbc的API模式并使用自定义算法
Springboot中sharding-jdbc的API模式并使用自定义算法 可配合AbstractRoutingData使用切换数据源 程序用到了AbstractRoutingData来切换数据源(数据源是自定义的格式编写并没有用springboot的自动装配的格式写),但是又用到sharding-jdbc进行…...
MySQL回表是什么?哪些情况下会回表
🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...
VR、AR、MR 傻傻分不清楚?区别的底层逻辑?
VR是一种能够制作虚拟物体并与人互动的基础技术。它与操作者所处的环境无关。AR可以让在特定位置出现或消失。MR可以让虚拟物体与真实物体进行互动。 AR和MR的大部分应用场景都是随机的,所以硬件基本都采用手机和眼镜。提升了便携性。牺牲了性能。这就导致了AR与MR…...
VScode运行C语言出现的调试问题 lauch:program does not exist 解决方法
"lauch:program does not exist"错误通常表示编译器或调试器无法找到指定的可执行文件。这可能是由于几个原因引起的。首先,确保你的源代码文件夹路径不包含中文字符,因为这可能导致编译器无法识别文件。其次,检查你的launch.json文…...
云原生安全:保护现代化应用的新一代安全策略
随着云计算和容器技术的快速发展,云原生应用已成为现代化软件开发和部署的主流趋势。然而,随之而来的安全挑战也变得更加复杂和严峻。本文将深入探讨云原生安全的概念、原则和最佳实践,帮助您理解如何有效保护云原生应用和敏感数据。 第一部…...
mysql操作
1、字符转Decimal CAST(column AS DECIMAL(9,2)) 2、将计算结果取两位小数: round(column, 2) 3、查询非空 select * from table_XX where id is not null; 4、连表update更新 update a inner join (select yy from b) c on a.id c.id set a.xx c.yy...
前端(十四)——DOM节点操作手册:你需要了解的一切
🙂博主:小猫娃来啦 🙂文章核心:DOM节点操作手册:你需要了解的一切 文章目录 前言DOM基础知识操作现有节点创建新节点遍历节点树修改节点属性和样式事件处理实践应用动态创建表格动态更新列表 前言 DOM(文档…...
PDF怎么转成PPT文件免费?一个软件解决
随着科技的不断发展和进步,电子文档已经成为我们日常工作和学习中不可或缺的一部分。PDF作为一种跨平台的文件格式,以其可靠性和易读性而备受推崇。然而,在某些情况下,我们可能需要PDF怎么转成PPT文件免费,以便更好地展…...
数据结构基础:P3-树(上)----编程作业02:List Leaves
本系列文章为浙江大学陈越、何钦铭数据结构学习笔记,系列文章链接如下: 数据结构(陈越、何钦铭)学习笔记 文章目录 一、题目描述二、整体思路与实现代码 一、题目描述 题目描述: 给定一棵树,按照从上到下、从左到右的顺序列出所有…...
山西电力市场日前价格预测【2023-08-25】
日前价格预测 预测明日(2023-08-25)山西电力市场全天平均日前电价为314.22元/MWh。其中,最高日前电价为336.17元/MWh,预计出现在18: 30。最低日前电价为283.05元/MWh,预计出现在24: 00。 价差方向预测 1: 实…...
手机无人直播软件,有哪些优势?
近年来,随着手机直播的流行和直播带货的市场越来越大,手机无人直播软件成为许多商家开播带货的首选。在这个领域里,声音人无人直播系统以其独特的优势,成为市场上备受瞩目的产品。接下来,我们将探讨手机无人直播软件给…...
SpringBoot概述SpringBoot基础配置yml的使用多环境启动
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 SpringBoot简介 一、 SpringBoot概述1.1 起步依赖…...
Python Pandas 处理Excel数据 制图
目录 1、饼状图 2、条形统计图 1、饼状图 import pandas as pd import matplotlib.pyplot as plt import numpy as np #from matplotlib.ticker import MaxNLocator # 解决中文乱码 plt.rcParams[font.sans-serif][SimHei] plt.rcParams[font.sans-serif]Microsoft YaHei …...
如何自己实现一个丝滑的流程图绘制工具(五)bpmn的xml和json互转
背景 因为服务端给的数据并不是xml,而且服务端要拿的数据是json,所以我们只能xml和json互转,来完成和服务端的对接 xml转json import XML from ./config/jsonxml.js/*** xml转为json* param {*} xml*/xmlToJson(xml) {const xotree new X…...
如何用Python自动化脚本轻松抢到大麦网演唱会门票:终极指南
如何用Python自动化脚本轻松抢到大麦网演唱会门票:终极指南 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪演唱会门票而烦恼吗?当周杰伦、五月天等热门演…...
深度掌控AMD Ryzen:解锁处理器底层调试与性能调优终极指南
深度掌控AMD Ryzen:解锁处理器底层调试与性能调优终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
AI从业者的“薪资真相”:不同方向、不同级别AI从业者的薪资水平
在人工智能技术飞速渗透各行业的当下,AI领域已成为软件测试从业者跨界转型的热门方向。相较于测试岗位相对稳定但涨幅平缓的薪资体系,AI行业的薪资结构呈现出极强的分层性与差异性。对于具备技术基础的测试从业者而言,深入了解AI领域的薪资逻…...
从Wi-Fi 7到PCIe 6.0:聊聊现代高速串行链路里CDR技术的新挑战与演进
从Wi-Fi 7到PCIe 6.0:高速串行链路中CDR技术的突破与挑战 在数据中心、人工智能和自动驾驶等领域的爆炸式增长推动下,现代高速串行链路的传输速率正以前所未有的速度攀升。从Wi-Fi 7的46Gbps到PCIe 6.0的64GT/s,再到即将到来的PCIe 7.0的128G…...
Linux下MT7601 USB无线网卡驱动编译与网络配置全攻略
1. 项目概述:从零构建一个可用的USB无线网卡最近在折腾一个基于老旧工控板的自制家庭服务器项目,手头正好有一块闲置的、芯片方案为MT7601的USB无线网卡。在Linux系统下,这类第三方芯片的网卡往往不像Intel、Realtek那样有完善的内核原生支持…...
Sourcetree新手指南:从零配置到高效版本控制
1. Sourcetree入门:为什么选择图形化Git工具 第一次接触版本控制时,我对着黑漆漆的命令行窗口敲git命令的手都在发抖。直到发现了Sourcetree这个神器,才真正体会到什么叫"可视化操作"。作为Atlassian公司出品的免费工具࿰…...
别再只用录屏软件了!用Unity Recorder H.264 MP4格式导出高清无压缩视频的完整配置流程
别再只用录屏软件了!用Unity Recorder H.264 MP4格式导出高清无压缩视频的完整配置流程 在数字内容创作领域,视频输出质量往往直接决定作品的专业度。许多开发者习惯使用第三方录屏工具捕捉Unity运行画面,却忽略了引擎内置的Unity Recorder模…...
39. UE5 GAS RPG:利用Motion Warping实现技能释放时的智能角色转向
1. Motion Warping插件基础与启用 Motion Warping是UE5官方提供的一个实验性插件,专门用于解决角色动画过程中的动态转向问题。这个插件的工作原理是在动画播放过程中插入一个"变形窗口",允许开发者指定某个时间段内角色的朝向或位置变化。我刚…...
雀巢冰淇淋在华投资的首家冰淇淋工厂迎来成立40周年 | 美通社头条
、美通社消息:近日,雀巢冰淇淋华南生产基地 —— 广州冷冻食品有限公司迎来成立40周年。该工厂是雀巢冰淇淋在华投资的首家冰淇淋工厂,陪伴一代代华南消费者成长的经典甜筒、飞鱼脆皮等产品皆出自广冻厂。1986年,在改革开放的时代…...
别再只会if-else了!用状态机思路重构你的STM32寻迹小车代码(附工程源码)
从if-else到状态机:重构STM32寻迹小车的工程化实践 当三个红外传感器同时检测到黑色轨迹时,你的小车应该左转还是右转?当传感器短暂丢失信号时,是紧急刹车还是保持原有动作?这些问题在初学者用if-else堆砌的代码中往往…...
