当前位置: 首页 > news >正文

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. 每页显示的数据量:决定每页显示多少条数据,根据用户需求和系统性能进行设定。

  2. 当前页码:表示用户当前所处的页码。一般情况下,我们使用数字或者页码链接来显示当前页。

  3. 总记录数:表示数据总共有多少条。

  4. 总页数:根据总记录数和每页显示的数据量计算出的总页数。

三、特殊字符的处理

1.SQL注入:

为了防止SQL注入攻击,我们需要对特殊字符进行转义或者使用参数绑定。在使用MyBatis进行数据库查询时,应该尽量使用参数绑定,而不是直接拼接SQL语句。参数绑定可以通过使用#{}${}来实现。其中,#{}会将参数值转义后作为预编译参数传递给数据库,而${}则会直接将参数值拼接到SQL语句中,所以在使用${}时需要特别注意防止SQL注入。

2.XML转义:

在MyBatis的XML配置文件中,如果我们需要在SQL语句中使用特殊字符(如<、>、&等),需要进行XML转义,以避免解析错误。常见的转义字符如下:

特殊字符转义字符
<&lt;
>&gt;
&&amp;
"&quot;
&apos;
<=&lt;=
>=&gt;=

示例

  <select id="queryminmax" resultType="com.ctb.model.Book" parameterType="com.ctb.dto.BookDto">select<include refid="Base_Column_List"/>from t_mvc_bookwhere price &gt; #{min} and price &lt; #{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注入&#xff1a; 2.XML转义&#…...

[语音识别] 基于Python构建简易的音频录制与语音识别应用

语音识别技术的快速发展为实现更多智能化应用提供了无限可能。本文旨在介绍一个基于Python实现的简易音频录制与语音识别应用。文章简要介绍相关技术的应用&#xff0c;重点放在音频录制方面&#xff0c;而语音识别则关注于调用相关的语音识别库。本文将首先概述一些音频基础概…...

Matlab彩色图像转索引图像

索引图像 索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像包括一个数据矩阵X&#xff0c;一个调色板矩阵map&#xff0c;也称为颜色映像矩阵。其中&#xff0c;数据矩阵X可以是8位无符号整型、16位无符号整型或双精度类型。调色板矩阵map是一个m3的数据阵列&…...

测试框架pytest教程(11)-pytestAPI

常量 pytest.__version__ #输出pytest版本 pytest.version_tuple #输出版本的元组形式 功能 pytest.approx pytest.approx 是一个用于进行数值近似比较的 pytest 断言工具。 在测试中&#xff0c;有时候需要对浮点数或其他具有小数部分的数值进行比较。然而&#xff0c;由于…...

Docker自学:利用FastAPI建立一个简单的web app

环境配置&#xff1a;下载Docker Desktop 文件一&#xff1a;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&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1EKggbyC4ZW-ufnDW45eKzA 提取码&#xff1a;k3b2 baseline 链接&#xff1a;https://pan.baidu.com/s/12hkZNJjQ__FGAHiF3fifvQ 提取码&#xff1a;88tb 数据…...

Springboot中sharding-jdbc的API模式并使用自定义算法

Springboot中sharding-jdbc的API模式并使用自定义算法 可配合AbstractRoutingData使用切换数据源 程序用到了AbstractRoutingData来切换数据源&#xff08;数据源是自定义的格式编写并没有用springboot的自动装配的格式写&#xff09;&#xff0c;但是又用到sharding-jdbc进行…...

MySQL回表是什么?哪些情况下会回表

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…...

VR、AR、MR 傻傻分不清楚?区别的底层逻辑?

VR是一种能够制作虚拟物体并与人互动的基础技术。它与操作者所处的环境无关。AR可以让在特定位置出现或消失。MR可以让虚拟物体与真实物体进行互动。 AR和MR的大部分应用场景都是随机的&#xff0c;所以硬件基本都采用手机和眼镜。提升了便携性。牺牲了性能。这就导致了AR与MR…...

VScode运行C语言出现的调试问题 lauch:program does not exist 解决方法

"lauch:program does not exist"错误通常表示编译器或调试器无法找到指定的可执行文件。这可能是由于几个原因引起的。首先&#xff0c;确保你的源代码文件夹路径不包含中文字符&#xff0c;因为这可能导致编译器无法识别文件。其次&#xff0c;检查你的launch.json文…...

云原生安全:保护现代化应用的新一代安全策略

随着云计算和容器技术的快速发展&#xff0c;云原生应用已成为现代化软件开发和部署的主流趋势。然而&#xff0c;随之而来的安全挑战也变得更加复杂和严峻。本文将深入探讨云原生安全的概念、原则和最佳实践&#xff0c;帮助您理解如何有效保护云原生应用和敏感数据。 第一部…...

mysql操作

1、字符转Decimal CAST(column AS DECIMAL(9,2)) 2、将计算结果取两位小数&#xff1a; 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节点操作手册:你需要了解的一切

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;DOM节点操作手册&#xff1a;你需要了解的一切 文章目录 前言DOM基础知识操作现有节点创建新节点遍历节点树修改节点属性和样式事件处理实践应用动态创建表格动态更新列表 前言 DOM&#xff08;文档…...

PDF怎么转成PPT文件免费?一个软件解决

随着科技的不断发展和进步&#xff0c;电子文档已经成为我们日常工作和学习中不可或缺的一部分。PDF作为一种跨平台的文件格式&#xff0c;以其可靠性和易读性而备受推崇。然而&#xff0c;在某些情况下&#xff0c;我们可能需要PDF怎么转成PPT文件免费&#xff0c;以便更好地展…...

数据结构基础:P3-树(上)----编程作业02:List Leaves

本系列文章为浙江大学陈越、何钦铭数据结构学习笔记&#xff0c;系列文章链接如下&#xff1a; 数据结构(陈越、何钦铭)学习笔记 文章目录 一、题目描述二、整体思路与实现代码 一、题目描述 题目描述&#xff1a; 给定一棵树&#xff0c;按照从上到下、从左到右的顺序列出所有…...

山西电力市场日前价格预测【2023-08-25】

日前价格预测 预测明日&#xff08;2023-08-25&#xff09;山西电力市场全天平均日前电价为314.22元/MWh。其中&#xff0c;最高日前电价为336.17元/MWh&#xff0c;预计出现在18: 30。最低日前电价为283.05元/MWh&#xff0c;预计出现在24: 00。 价差方向预测 1&#xff1a; 实…...

手机无人直播软件,有哪些优势?

近年来&#xff0c;随着手机直播的流行和直播带货的市场越来越大&#xff0c;手机无人直播软件成为许多商家开播带货的首选。在这个领域里&#xff0c;声音人无人直播系统以其独特的优势&#xff0c;成为市场上备受瞩目的产品。接下来&#xff0c;我们将探讨手机无人直播软件给…...

SpringBoot概述SpringBoot基础配置yml的使用多环境启动

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 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&#xff0c;而且服务端要拿的数据是json&#xff0c;所以我们只能xml和json互转&#xff0c;来完成和服务端的对接 xml转json import XML from ./config/jsonxml.js/*** xml转为json* param {*} xml*/xmlToJson(xml) {const xotree new X…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...