MyBatis分页插件PageHelper的使用及MyBatis的特殊符号---详细介绍

一,分页的概念

分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。在分页中,数据被分割成一定数量的页,每页显示一部分数据或内容,用户可以通过翻页或跳分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。在分页中,数据被分割成一定数量的页,每页显示一部分数据或内容,用户可以通过翻页或跳转页面来浏览更多内容。转页面来浏览更多内容

1.1 分页应用场景

数据展示:

     当需要展示大量数据,并将其划分为多个页面进行逐页查看时,可以使用分页应用。例如,在电子商务网站上展示商品列表或搜索结果时,分页应用可以提供良好的用户体验

数据浏览:

     当需要在一个长列表或长文档中进行浏览时,分页应用可以将内容分割成多个页面,方便用户逐页阅读或浏览。例如,在新闻网站上浏览新闻文章或在书籍电子阅读器中阅读电子书时,分页应用可以让用户更加方便地跳转页面

搜索结果分页:

     当进行搜索操作时,检索出来的结果可能非常庞大,分页应用可以将搜索结果分页展示,以便用户逐页查看结果。这在搜索引擎、论坛或社交媒体平台等场景下非常常见

1.2 分页的优点

提高性能:

    分页应用可以将大量数据分割成多个页面,只加载当前页面所需的数据,从而减轻数据库和服务器的负载,提高查询和渲染速度。

改善用户体验:

   通过分页,用户可以更方便地浏览和导航大量数据,减少页面滚动和加载时间,提高交互效率和用户满意度。

灵活导航:

    分页应用可以为用户提供灵活的导航选项,允许用户跳转到特定页面,或者调整每页显示的数据量,以满足个性化需求。

数据安全性:

    通过限制每页数据的数量,分页应用可以限制对数据的访问,提高数据的安全性和隐私保护。

二,分页功能的实现

本文章根据上篇文章内容进行扩展实现分页功能,上一篇连接地址:简单的模糊查询

为了让分页更加提高效率我们用的是一个PageHelper插件,让插件来来帮助我们实现这个功能

pom.xml导入PageHelper插件

    <!-- **********************  分页 Pom依赖 ********************** --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>

mybatis.xml配置拦截器

注意:该配置受dtd约束影响,要注意配置的位置,不然根目录会报错

 <plugins><!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>

Mapper.xml的配置:

  <select id="mhcx4" resultType="com.Bing.model.Book" parameterType="java.util.Map" >select<include refid="Base_Column_List" />from t_mvc_bookwhere bname like concat('%',#{bname},'%')</select>

在uils导入PageBean工具类

package com.Bing.util;import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;public class PageBean implements Serializable {private static final long serialVersionUID = 2422581023658455731L;//页码private int page=1;//每页显示记录数private int rows=10;//总记录数private int total=0;//是否分页private boolean isPagination=true;//上一次的请求路径private String url;//获取所有的请求参数private Map<String,String[]> map;public PageBean() {super();}//设置请求参数public void setRequest(HttpServletRequest req) {String page=req.getParameter("page");String rows=req.getParameter("rows");String pagination=req.getParameter("pagination");this.setPage(page);this.setRows(rows);this.setPagination(pagination);this.url=req.getContextPath()+req.getServletPath();this.map=req.getParameterMap();}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Map<String, String[]> getMap() {return map;}public void setMap(Map<String, String[]> map) {this.map = map;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public void setPage(String page) {if(null!=page&&!"".equals(page.trim()))this.page = Integer.parseInt(page);}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}public void setRows(String rows) {if(null!=rows&&!"".equals(rows.trim()))this.rows = Integer.parseInt(rows);}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public void setTotal(String total) {this.total = Integer.parseInt(total);}public boolean isPagination() {return isPagination;}public void setPagination(boolean isPagination) {this.isPagination = isPagination;}public void setPagination(String isPagination) {if(null!=isPagination&&!"".equals(isPagination.trim()))this.isPagination = Boolean.parseBoolean(isPagination);}/*** 获取分页起始标记位置* @return*/public int getStartIndex() {//(当前页码-1)*显示记录数return (this.getPage()-1)*this.rows;}/*** 末页* @return*/public int getMaxPage() {int totalpage=this.total/this.rows;if(this.total%this.rows!=0)totalpage++;return totalpage;}/*** 下一页* @return*/public int getNextPage() {int nextPage=this.page+1;if(this.page>=this.getMaxPage())nextPage=this.getMaxPage();return nextPage;}/*** 上一页* @return*/public int getPreivousPage() {int previousPage=this.page-1;if(previousPage<1)previousPage=1;return previousPage;}@Overridepublic String toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination+ "]";}
}

Mapper类方法:

    List<Book> mhcx4(@Param("bname") String bname);

在Mapper.xml配置的方法名进行定义相对应的接口和实现类

接口方法:

    List<Book> mhcx4(String bname, PageBean pageBean);

实现类:

 @Overridepublic List<Book> mhcx4(String bname, PageBean pageBean) {if(pageBean!=null && pageBean.isPagination()){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());}List<Book> books=bookMapper.mhcx4("圣墟");if(pageBean!=null && pageBean.isPagination()){PageInfo<Book> info = new PageInfo<Book>(books);System.out.println("当前页:"+ info.getPageNum());System.out.println("展示记录数:"+info.getPageSize());System.out.println("符合查询条件的总记录:"+info.getTotal());pageBean.setTotal((int) info.getTotal());}return books;}

测试:

    @Testpublic void mhcx4() {PageBean pageBean=new PageBean();//实例化PageBeanpageBean.setPage(2);//第几页pageBean.setRows(15);//显示的条目bookBiz.mhcx4("圣墟",pageBean).forEach(System.out::println);//模糊查询}

运行结果:

如果不想用分页功能单纯的想展示所有数据的话,在测试的时候调用下面方法即可

pageBean.setPagination(false);

三,Mybatis特殊字符

 MyBatis 中,有几个特殊字符需要进行转义或处理,以避免 SQL 解析错误或相关问题。以下是一些常见的特殊字符及其处理方式

< 和 >

     这两个字符在 XML 文件中有特殊含义,因此需要进行转义。可以使用 &lt; 和 &gt; 分别表示 < 和 >

&

     也需要进行转义,可以使用 &amp; 表示

'

    当在 SQL 查询语句中使用字符串参数时,需要注意单引号的处理。可以使用双引号包裹字符串,或者使用两个单引号来转义一个单引号。例如:SELECT * FROM user WHERE name = "John" 或 SELECT * FROM user WHERE name = 'O''Connor'

% 和 _

     在使用 LIKE 语句进行模糊查询时,% 表示任意数量的字符,而 _ 表示一个字符。如果需要在字符串中使用字面量 % 和 _,则需要使用 \ 进行转义。例如:SELECT * FROM user WHERE name LIKE '%\%%' ESCAPE '\'

| 和 &

    在使用动态 SQL 标签(如 <if><choose><foreach> 等)时,| 表示逻辑 OR 运算符,而 & 表示逻辑 AND 运算符。如果要显示字面量的 | 和 & ,则需要使用 \ 进行转义。例如:<![CDATA[${param1} \| ${param2}]]>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109959.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨平台图表:ChartDirector for .NET 7.1 Crack

什么是新的 ChartDirector for .NET 7.0 支持跨平台使用&#xff0c;但仅限于 .NET 6。这是因为在 .NET 7 中&#xff0c;Microsoft 停止了用于非 Windows 使用的 .NET 图形库 System.Drawing.Common。由于 ChartDirector for .NET 7.0 依赖于该库&#xff0c;因此它不再支持 .…

设计模式—职责链模式(Chain of Responsibility)

目录 思维导图 什么是职责链模式&#xff1f; 有什么优点呢&#xff1f; 有什么缺点呢&#xff1f; 什么场景使用呢&#xff1f; 代码展示 ①、职责链模式 ②、加薪代码重构 思维导图 什么是职责链模式&#xff1f; 使多个对象都有机会处理请求&#xff0c;从而避免请…

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

与面试官互动:建立积极的技术讨论氛围

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

攻击与防御实战经验分享:分析真实的攻击事件和入侵行为,讨论防御方法和实践经验

章节 1: 前言 作为IT领域的从业者&#xff0c;我们时刻都面临着网络安全的挑战。攻击者不断寻找漏洞&#xff0c;而防御者则需要时刻保持警惕&#xff0c;采取最佳实践来保护系统和数据。在本文中&#xff0c;我们将分享一些真实的攻击事件和入侵行为&#xff0c;并探讨针对这…

API 接口应该如何设计?如何保证安全?如何签名?如何防重?

说明&#xff1a;在实际的业务中&#xff0c;难免会跟第三方系统进行数据的交互与传递&#xff0c;那么如何保证数据在传输过程中的安全呢&#xff08;防窃取&#xff09;&#xff1f;除了https的协议之外&#xff0c;能不能加上通用的一套算法以及规范来保证传输的安全性呢&am…

Eclipse打jar包与JavaDOC文档的生成

补充知识点——Eclipse打jar包与JavaDOC文档的生成 1、Eclipse如何打jar包&#xff0c;如何运行jar包 Java当中编写的Java代码&#xff0c;Java类、方法、接口这些东西就是项目中相关内容&#xff0c;到时候我们需要把代码提供给甲方、或者是我们需要运行我们编写的代码&…

Docker:Harbor 私有仓库迁移

Harbor 私有仓库迁移 一.私有仓库迁移的介绍 1.为何要对Harbor 私有仓库的迁移 &#xff08;1&#xff09;硬件升级或更换&#xff1a;如果源 Harbor 在旧的硬件设备上运行&#xff0c;并且计划将其迁移到新的硬件设备上&#xff0c;那么需要执行迁移操作。 &#xff08;2&…

Python爬虫追踪新闻事件发展进程及舆论反映

目录 实现方案 1. 确定目标新闻源&#xff1a; 2. 确定关键词&#xff1a; 3. 使用网络爬虫获取新闻内容&#xff1a; 4. 提取和分析新闻文章&#xff1a; 5. 追踪新闻事件的发展进程&#xff1a; 6. 监测舆论反映&#xff1a; 7. 数据可视化&#xff1a; 完整代码示例…

ExpressLRS开源之RC链路性能测试

ExpressLRS开源之RC链路性能测试 1. 源由2. 分析3. 测试方案4. 测试设计4.1 校准测试4.2 实验室测试4.3 拉距测试4.4 遮挡测试 5. 总结6. 参考资料 1. 源由 基于ExpressLRS开源基本调试验证方法&#xff0c;对RC链路性能进行简单的性能测试。 修改设计总能够满足合理的需求&a…

香橙派OrangePi zero H2+ 驱动移远4G/5G模块

目录 1 安装系统和内核文件&#xff1a; 1.1 下载镜像 1.2 内核头安装 1.2.1 下载内核 1.2.2 将内核头文件导入开发板中 1.2.3 安装内核头 2 安装依赖工具&#xff1a; 2.1 Installing Required Host Utilities 3 驱动步骤&#xff1a; 3.1 下载模块驱动文件…

Windows上安装Hadoop 3.x

目录 0. 安装Java 1. 安装Hadoop 1.1 下载Hadoop 1.2 下载winutils 2. 配置Hadoop 1. hadoop-env.cmd 2. 创建数据目录 3. core-site.xml 4. hdfs-site.xml 3. 启动测试 3.1 namenode格式化 3.2 启动Hadoop 3.3 查看webui 3.4 测试hdfs 3.5. 测试MapReduce 4. 还…

Markdown 扩展语法练习

风无痕 August 26, 2023 Markdown 指南中文版 Markdown 入门指南Markdown 基本语法Markdown 扩展语法Markdown 基本语法练习Markdown 扩展语法练习 代码 <h3 id"table">表格</h3>| Syntax | Description | | --- | --- | | Header | Title | | Paragrap…

【Terraform学习】使用 Terraform创建 S3 存储桶事件(Terraform-AWS最佳实战学习)

本站以分享各种运维经验和运维所需要的技能为主 《python》&#xff1a;python零基础入门学习 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

用AI重构的钉钉,“钱”路在何方?

点击关注 文&#xff5c;郝 鑫&#xff0c;编&#xff5c;刘雨琦 钉钉2023年生态大会&#xff0c;离开了两年的无招&#xff0c;遇到了单飞9天的钉钉。 “做小钉钉、做好钉钉、做酷钉钉”&#xff0c;无招重申了钉钉的方向。 无招提到的三点&#xff0c;再加上“高质量增长”…

ubuntu22.04.1-live的vm虚拟机扩展磁盘

1、虚拟机分配硬盘100G&#xff0c;进系统df -h根目录只有50G 2、查看所有块设备 lsblk 3、 查看卷信息vgdisplay 4、在原有基础上增加49G lvextend -L 49G /dev/ubuntu-vg/ubuntu-lv 5、调整大小 resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

微信小程序 趣味学习与益智游戏系统APP

管理员、用户可通过HBuilder系统手机打开系统&#xff0c;注册登录后可进行管理员后端&#xff1b;首页、个人中心、用户管理、学生分类管理、学一学管理、玩一玩管理、听一听管理、试题管理、练一练管理、系统管理、考试管理&#xff0c;用户前端&#xff1b;首页、学一学、玩…

lenovo联想笔记本小新Air-15 2021款Intel版ITL版(82GM)原装出厂Win10系统

自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;11.2GB 链接&#xff1a;https://pan.baidu.com/s/12NTMOt5eUjOIsbayXPyiww?pwdrs4v 提取码&#xf…

HTML番外篇(四)-HTML5新增元素-CSS常见函数-理解浏览器前缀-BFC

一、HTML5新增元素 1.HTML5语义化元素 在HMTL5之前&#xff0c;我们的网站分布层级通常包括哪些部分呢&#xff1f; header、nav、main、footer ◼ 但是这样做有一个弊端&#xff1a; 我们往往过多的使用div, 通过id或class来区分元素&#xff1b;对于浏览器来说这些元素不…

HCIP-OpenStack组件之neutron

neutron&#xff08;ovs、ovn&#xff09; OVS OVS(Open vSwitch)是虚拟交换机&#xff0c;遵循SDN(Software Defined Network&#xff0c;软件定义网络)架构来管理的。 OVS介绍参考&#xff1a;https://mp.weixin.qq.com/s?__bizMzAwMDQyOTcwOA&mid2247485088&idx1…