MyBatis分页插件PageHelper的使用及特殊字符的处理

news2025/1/20 16:58:24

目录

一、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的使用及特殊字符的处理到这就结束啦!!😊

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

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

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

0基础学习VR全景平台篇 第90篇:智慧眼-数据统计

【数据统计】是按不同条件去统计整个智慧眼项目中的热点&#xff0c;共包含四大块&#xff0c;分别是数据统计、分类热点、待审核、回收站&#xff0c;下面我们来逐一进行介绍。 1、数据统计 ① 可以按所属分类、场景分组、所属场景、热点类型以及输入热点名去筛选对应的热点&…

Spring之Spring生态系统的演进

未来展望&#xff1a;Spring生态系统的演进 未来展望&#xff1a;Spring生态系统的演进 摘要引言词汇解释详细介绍新技术趋势与影响开发方向与展望探讨Spring在未来的发展趋势微服务与云原生响应式编程强调开发效率和全栈式开发支持人工智能和大数据保持灵活性和创新性 针对新兴…

有效降低传导辐射干扰

一直以来&#xff0c;设计中的电磁干扰&#xff08;EMI&#xff09;问题十分令人头疼&#xff0c;尤其是在汽车领域。为了尽可能的减小电磁干扰&#xff0c;设计人员通常会在设计原理图和绘制布局时&#xff0c;通过降低高di / dt的环路面积以及开关转换速率来减小噪声源。 但…

SpringBootWeb案例 Part 4

3. 修改员工 需求&#xff1a;修改员工信息 在进行修改员工信息的时候&#xff0c;我们首先先要根据员工的ID查询员工的信息用于页面回显展示&#xff0c;然后用户修改员工数据之后&#xff0c;点击保存按钮&#xff0c;就可以将修改的数据提交到服务端&#xff0c;保存到数据…

eps三维测图软件工具箱设置

1、打开软件&#xff0c;点击工具箱按钮。具体如下&#xff1a; 2、点击工具箱内分组按钮&#xff0c;右键选择插入命令。如下&#xff1a; 3、进入命令设置界面&#xff0c;如下&#xff1a;

Android View动画整理

此前也有写 View 动画相关的内容&#xff0c;但都只是记录代码&#xff0c;没有特别分析。以此篇作为汇总、整理、分析。 Android View 动画有4中&#xff0c;分别是 平移动画 TranslateAnimation缩放动画 ScaleAnimation旋转动画 RotateAnimation透明度动画 AlphaAnimation …

深度学习模型优化:提高训练效率和精度的技巧

文章目录 1. 数据预处理2. 批量归一化&#xff08;Batch Normalization&#xff09;3. 学习率调整4. 提前停止&#xff08;Early Stopping&#xff09;5. 模型压缩与剪枝6. 模型并行与分布式训练7. 自动化超参数调整结论 &#x1f389;欢迎来到AIGC人工智能专栏~探索Java中的静…

【MySQL】2、MySQL数据库的管理

常用 describe user; Field:字段名称 Type:数据类型 Null :是否允许为空 Key :主键 Type:数据类型 Null :是否允许为空key :主键 Default :默认值 Extra :扩展属性&#xff0c;例如:标志符列&#xff08;标识了种子&#xff0c;增量/步长&#xff09;1 2 id&#xff1a;1 3 5 …

机器视觉工程师,2023年最大忠告,没实力,别辞职

最近很多粉丝频繁联系我&#xff0c;太难了&#xff0c;想辞职&#xff0c;干不下去&#xff0c;想要要辞职。 我会慢慢和他分析他当前的优势和劣势&#xff0c;从目前掌握各家公司招聘的信息来看&#xff0c;分以下几种情况&#xff1a; 第一&#xff1a;员工流动性大的公司&…

badgerdb 压缩合并

压缩合并原因 badgerdb是lsm tree派系的数据库&#xff0c;put&#xff0c;delete接口都是通过追加写日志的方式来保存的&#xff0c;日志如果一直不清理&#xff0c;会导致读性能越来越差&#xff0c;占用的存储空间也越来越大&#xff0c;badgerdb为了解决这些问题&#xff0…

深入解析:树结构及其应用

文章目录 学习树的基本概念理解树的遍历方式学习堆和优先队列的应用案例分析&#xff1a;使用堆进行Top K元素的查找结论 &#x1f389;欢迎来到数据结构学习专栏~深入解析&#xff1a;树结构及其应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈…

提高生产力的强大开发工具

在当今快速发展的软件开发领域&#xff0c;提高生产效率和质量是每个开发团队追求的目标。JNPF&#xff08;Java Non-Enterprise Application Framework&#xff09;作为一种灵活且强大的开发工具&#xff0c;旨在帮助开发团队实现这一目标。本文将深入探讨JNPF如何提高生产力&…

非凸联合创始人李佐凡受邀出席复旦DSBA项目座谈会

8月17日&#xff0c;非凸科技联合创始人&CTO李佐凡受邀参加复旦管院数据科学与商业分析专业硕士&#xff08;DS&BA&#xff09;项目发展座谈会&#xff0c;与学校教授、老师在生源背景、课程教学、职业发展、学生培养和企业合作方面进行深入交流&#xff0c;旨在更好地…

【衍射光栅】用于Matlab的交互式衍射光栅模型研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【C++STL基础入门】vector运算和遍历、排序、乱序算法

文章目录 前言一、vector运算符1.1 比较运算符vector有哪些比较运算符&#xff1f;示例代码注意 1.2 下标运算符 二、算法2.1 算法需要的头文件2.2 遍历算法2.3 排序算法从大到小从小到大 2.4 乱序算法 总结 前言 C标准库提供了丰富的容器和算法&#xff0c;其中vector是最常用…

基本概念【算术、 关系、逻辑、位、字符串、条件、优先级等运算符】(三)-全面详解(学习总结---从入门到深化)

文章目录 运算符(operator) 算术运算符 赋值及其扩展赋值运算符 关系运算符 逻辑运算符 位运算符 字符串连接符 条件运算符 运算符优先级的问题 数据类型的转换 自动类型转换 强制类型转换 Scanner 处理键盘输入 运算符(operator) 计算机的基本用途就是执行数学运…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…