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_book
    where 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_book
    where 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

 @Override
    public 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;
    }

测试类

@Test
    public 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_book
    where 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_book
    where <![CDATA[
    price < #{max} and price >#{min}
    ]]>
  </select>

两者测试结果一致      ---最常用的是CDATA

 MyBatis分页插件PageHelper的使用及特殊字符的处理到这就结束啦!!😊

祝各位友友们身体健康,工作顺利!!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】【驱动】第一个相对完整的驱动编写

【Linux】【驱动】第一个相对完整的驱动编写 续1.驱动部分的代码2 app 代码3 操作相关的代码 续 这个章节会讲述去直接控制一个GPIO&#xff0c;高低电平。 因为linux不允许直接去操作寄存器&#xff0c;所以在操作寄存器的时候就需要使用到函数&#xff1a;ioremap 和iounma…

线性代数的学习和整理10:各种特殊类型的矩阵(草稿-----未完成 建设ing)

目录 1 图形化分类 1.1对称矩阵 1.2 梯形矩阵 1.3 三角矩阵 1.3.1 上三角矩阵 1.4 对角线矩阵 2 按各自功能分 2.1 等价矩阵 2.2 增广矩阵 2.3 伴随矩阵 2.4 正交矩阵 2.5 正交矩阵 2.6 相似矩阵 1 图形化分类 1.1对称矩阵 1.2 梯形矩阵 1.3 三角矩阵 1.3.1 上…

【ARM-Linux】项目,语音刷抖音项目

文章目录 所需器材装备操作SU-03T语音模块配置代码&#xff08;没有用wiring库&#xff0c;自己实现串口通信&#xff09;结束 所需器材 可以百度了解以下器材 orangepi-zero2全志开发板 su-03T语音识别模块 USB-TTL模块 一个安卓手机 一根可以传输的数据线 装备操作 安…

windows Etcd的安装与使用

一、简介 etcd是一个分布式一致性键值存储&#xff0c;其主要用于分布式系统的共享配置和服务发现。 etcd由Go语言编写 二、下载并安装 1.下载地址&#xff1a; https://github.com/coreos/etcd/releases 解压后的目录如下&#xff1a;其中etcd.exe是服务端&#xff0c;e…

C语言弯道超车必做好题锦集(编程题)

目录 前言&#xff1a; 1.计算日期到天数转换 2.尼科彻斯定理 3.密码检查 4.图片整理 5.寻找数组的中心下标 6.字符个数统计 7.多数元素 前言&#xff1a; 编程想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#xff01;为此我…

C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声

本示例使用的设备&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 服务端代码&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.…

iptables的使用规则

环境中为了安全要限制swagger的访问&#xff0c;最简单的方式是通过iptables防火墙设置规则限制。 在测试服务器中设置访问swagger-ui.html显示如下&#xff0c;区分大小写&#xff1a; iptables设置限制访问9783端口的swagger字段的请求&#xff1a; iptables -A INPUT -p t…

Python可视化工具库实战

Matplotlib Matplotlib 是 Python 的可视化基础库&#xff0c;作图风格和 MATLAB 类似&#xff0c;所以称为 Matplotlib。一般学习 Python 数据可视化&#xff0c;都会从 Matplotlib 入手&#xff0c;然后再学习其他的 Python 可视化库。 Seaborn Seaborn 是一个基于 Matplo…

Vue 中 diff 算法原理

一、Diff 概念 Vue 基于虚拟 DOM 做更新。diff 算法的核心就是比较两个虚拟节点的差异&#xff0c;返回一个 patch 对象&#xff0c;这个对象的作用就是存储两个节点不同的地方&#xff0c;最后用 patch 里记录的信息进行更新真实DOM。 diff 算法的在很多场景下都有应用&#…

计算机竞赛 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

6.oracle中listagg函数使用

1. 作用 可以实现行转列&#xff0c;将多列数据聚合为一列&#xff0c;实现数据的压缩 2. 语法 listagg(measure_expr&#xff0c;delimiter) within group ( order by order_by_clause); 解释&#xff1a; measure_expr可以是基于任何列的表达式 delimiter分隔符&#xff0c…

创建harbor仓库并进行一些操作

文章目录 前言一、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。二、安装搭建私有仓库 Harbor1、安装docker-compse2、安装harbor 3、修改配置文件4、运行脚本5 登入harbor仓库总结 前言 本篇文章需要完成的以下几个操作&#xff1a; 使用mysql:5.6和 ownclo…

爬虫逆向实战(二十)--某99网站登录

一、数据接口分析 主页地址&#xff1a;某99网站 1、抓包 通过抓包可以发现登录接口是AC_userlogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”可以发现txtPassword和aws是加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无…

【Git版本控制工具使用---讲解一】

Git版本控制工具使用 安装设置用户名签名和邮箱Git常用的命令 初始化本地库查看本地状态Git 命令添加暂存区提交本地库查看版本信息修改文件版本穿梭 安装 首先根据自身电脑的配置选择性的安装是32位的还是64位的Git版本控制工具 我这边安装的是64位的 以下是我安装的时候的过…

C语言:选择+编程(每日一练Day8)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;字符个数统计 思路一&#xff1a; 题二&#xff1a;多数元素 思路一&#xff1a; 本人实力有限可能对一些…

事件捕获和事件冒泡

事件捕获和事件冒泡与事件流有关系。 以下代码&#xff0c;点击 aa &#xff0c;控制台会打印什么呢&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content&q…

Docker(一)-安装、架构、业务开发常用命令、Dockerile、镜像卷、镜像仓库

基于业务开发使用Docker Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序&#xff0c;并可以缩短从编写到部署运行代码…

App Inventor 2 开发 ChatGPT 对话App

ChatGPT大家应该不会陌生&#xff0c;它的回答内容非常的专业及深入&#xff0c;具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App&#xff0c;先看效果&#xff1a; App Inventor 2 ChatGPT教育领域对话演示 代码块如下&#xff1a; 用到的核心组件“ChatBot…

kafka--技术文档--spring-boot集成基础简单使用

阿丹&#xff1a; 查阅了很多资料了解到&#xff0c;使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意&#xff01; 使用spring-boot整合kafka 1、导入依赖 核心配…

Web3和去中心化:互联网的下一个演化阶段

文章目录 Web3和去中心化的定义Web3&#xff1a;去中心化&#xff1a; 为什么Web3和去中心化如此重要&#xff1f;数据隐私和安全&#xff1a;去中心化的创新&#xff1a;去除中间商&#xff1a; Web3和去中心化的应用领域去中心化金融&#xff08;DeFi&#xff09;&#xff1a…