【MyBatis】:PageHelper分页插件与特殊字符处理

目录

一、PageHelper介绍

二、PageHelper使用

1. 导入pom依赖

2. Mybatis.cfg.xml 配置拦截器

3. 配置 Mapper.xml

4. 编写测试

三、特殊字符处理

1. 使用转义字符

2. 使用CDATA 区段


一、PageHelper介绍

        PageHelper 是 Mybatis 的一个插件,这里就不扯了,就是为了更加便捷的进行分页查询。

官方网址:https://pagehelper.github.io/

 

PageHelper插件的优点:

  1. 物理分页:支持常见的 12 种数据库Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等...
  2. 支持多种分页方式:支持常见的RowBounds(PageRowBounds),PageHelper.startPage 方法调用,Mapper 接口参数调用。
  3. QueryInterceptor 规范:使用 QueryInterceptor 规范,开发插件更轻松。

二、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>上面,不然会报错。

正确实例:

其他配置:

<plugins><!-- com.github.pagehelper为PageHelper类所在包名 --><plugin interceptor="com.github.pagehelper.PageHelper"><!-- 支持的方言: oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012 --><property name="dialect" value="mysql"/><!-- 该参数默认为false --><!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --><!-- 和startPage中的pageNum效果一样--><property name="offsetAsPageNum" value="true"/><!-- 该参数默认为false --><!-- 设置为true时,使用RowBounds分页会进行count查询 --><property name="rowBoundsWithCount" value="true"/><!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 --><!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)--><property name="pageSizeZero" value="true"/><!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 --><!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 --><!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --><property name="reasonable" value="false"/><!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 --><!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 --><!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 --><!-- 不理解该含义的前提下,不要随便复制该配置 --><property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/><!-- 支持通过Mapper接口参数来传递分页参数 --><property name="supportMethodsArguments" value="false"/><!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --><property name="returnPageInfo" value="none"/></plugin>
</plugins>

3. 配置 Mapper.xml

博主设置的类型是map集合,可根据需求自行修改。

    <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')</select>

1. 生成一个方法接口

 2. 编写service层接口和继承接口类......省略

4. 编写测试

package com.ycxw.demo;import com.github.pagehelper.PageHelper;
import com.ycxw.biz.BookBiz;
import com.ycxw.biz.impl.BookBizImpl;
import com.ycxw.mapper.BookMapper;
import com.ycxw.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.util.HashMap;
import java.util.Map;/*** @author 云村小威* @site blog.csdn.net/Justw320* @create 2023-08-20 18:05*/
public class CURDTest {private BookBiz bookBiz;private SqlSession sqlSession;@Beforepublic void before() {System.out.println("执行测试方法之前会执行的初始化代码块方法");//获取一个数据库会话对象,并将其赋值给sqlSession变量this.sqlSession = SessionUtil.openSession();//实例化业务逻辑层BookBizImpl book = new BookBizImpl();//获取接口实例BookMapper mapper = this.sqlSession.getMapper(BookMapper.class);book.setBookMapper(mapper);//最后赋值给bookBiz接口,便于对数据库进行增删改查操作this.bookBiz = book;}@Afterpublic void after() {System.out.println("执行测试方法之后的后执行的方法");//提交事务this.sqlSession.commit();}@Testpublic void test(){Map map = new HashMap();map.put("bname","圣墟");PageHelper.startPage(1, 10);bookBiz.listPager(map).forEach(System.out::println);}
}

通过这个方法可实现分页:

PageHelper.startPage(页码, 数据量);

        当然,该演示只是最简单的方法,可通过方法传递动态修改页码数据等等。更多用法欢迎大佬们在评论区留言🫰

三、特殊字符处理

        在mybatis中我们经常用到特殊字符动态拼接语句,如经常使用到 大于(>,>=)、小于(<,<=)、不等于(<> ,!=)符号。Mybatis使用的 *.xml文件格式,需要在尖括号进行相关的转义或者使用 CDATA 区段。

1. 使用转义字符

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

示例:

    <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">select * from t_mvc_book where price &lt; 9 and price &gt; 20</select>

 

2. 使用CDATA 区段

<![CDATA[ ]]>是xml语法,在<![CDATA[ ]]>内部的所有内容都会被解析器忽略,不进行转义。所以在xml中这是一种通用方案。

特殊字符<![CDATA[ ]]>
<<![CDATA[<]]>
><![CDATA[>]]>
&<![CDATA[&]]>
"<![CDATA["]]>
<![CDATA[']]>
<=<![CDATA[<=]]>
>=<![CDATA[>=]]>
!=<![CDATA[!=]]>

 示例:

   <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">select * from t_mvc_book where  <![CDATA[ price > #{price} and #{price} != 0 ]]></select>

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

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

相关文章

aardio的CS架构mysql数据表查询实例

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom479) winform.add( buttonAdd{cls"button";text"复制";left516;top442;right587;bottom473;z11}; buttonClose{cls"button";text"退出";…

多线程——学习记录2

目录 单例模式两种单例写法饿汉式和懒汉式的区别 RuntimeTimer 计时器两个线程间的通信关键点&#xff1a;wait()线程等待 和 notify()随机唤醒等待的线程; 三个或三个以上间的线程通信关键点&#xff1a;notifyAll()唤醒所有线程 线程间通信需要注意的问题JDK1.5的新特性互斥锁…

Java:ArrayList集合、LinkedList(链表)集合的底层原理及应用场景

ArrayList集合的底层原理及应用场景 LinkedList&#xff08;链表&#xff09;集合的底层原理及应用场景 单向链表 增加数据 删除数据 双向链表 LinkedList的应用场景之一:可以用来设计队列 入队 出队 LinkedList的应用场景之一:可以用来设计栈 压栈&#xff08;push),addFirst…

Socket基本原理

一、简单介绍 Socket&#xff0c;又称套接字&#xff0c;是Linux跨进程通信&#xff08;IPC&#xff0c;Inter Process Communication&#xff09;方式的一种。相比于其他IPC方式&#xff0c;Socket牛逼在于可做到同一台主机内跨进程通信&#xff0c;不同主机间的跨进程通信。…

redis常用五种数据类型详解

目录 前言&#xff1a; string 相关命令 内部编码 应用场景 hash 相关命令 内部编码 应用场景 list 相关命令 内部编码 应用场景 set 相关命令 内部编码 应用场景 Zset 相关命令 内部编码 应用场景 渐进式遍历 前言&#xff1a; redis有多种数据类型&…

Spring Clould 网关 - Gateway

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Gateway网关-网关作用介绍&#xff08;P35&#xff09; Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2…

BTP Integration Suite学习笔记 - (Unit4) Developing with SAP Integration Suite

详细指导还是要看官方文档 4. 云集成管理 4.1 云集成介绍 什么是云集成&#xff1f; 前三章讲了很多内容&#xff0c;但都不是最核心的&#xff0c;通常我们用CPI是让他实现原来PI/PO的功能的&#xff0c;是用来做集成的。这章才刚开始。 云集成有以下几个特性&#xff1a;…

【LeetCode-中等题】438. 找到字符串中所有字母异位词

题目 题解一&#xff1a;暴力排序 依次截取三为排序好的字符串拿出来比较 // 方法一&#xff0c;暴力排序List<Integer> res new ArrayList<Integer>();int n s.length();int k p.length();if (n < k) {return res;}char[] chars p.toCharArray();Arrays.s…

pdf太大怎么压缩大小?这样压缩文件很简单

工作和学习中&#xff0c;用到PDF文件的机会还是比较多的&#xff0c;但有时候PDF文件过大会给我们带来困扰&#xff0c;比如上传PDF文件时会因超出系统大小导致无法上传&#xff0c;这时候简单的解决方法就是压缩PDF文件&#xff0c;下面就来看看具体的操作方法吧~ 方法一&…

redis实战-缓存三剑客穿透击穿雪崩解决方案

缓存穿透 定义 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库&#xff0c;造成数据库压力&#xff0c;也让缓存没有发挥出应有的作用 解决方案 缓存空对象 当我们客户端…

RISC-V IOPMP实际用例-Rapid-k模型在NVIDIA上的应用

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

javascript常用的东西

JavaScript 是一门强大的编程语言&#xff0c;用于为网页添加交互性和动态性。也可以锻炼人们的逻辑思维&#xff0c;是一个非常好的东西。 一、变量和数据类型&#xff1a; 变量&#xff1a; 变量是用于存储数据值的容器。在 JavaScript 中&#xff0c;你可以使用 var、let…

自动化测试平台seldom-platform部署及使用

介绍 seldom-platform是一个基于seldom测试框架的测试平台 项目地址&#xff1a;https://github.com/SeldomQA 文档&#xff1a;seldom 语雀 首先&#xff0c;专门为seldom测试框架提供平台化支持。其次&#xff0c;只负责自动化测试项目的解析、执行用例&#xff0c;当然…

分析商务报表使用什么工具?

传统的BI分析商务报表存在的问题 随着数字化转型的深入推进&#xff0c;企业面临着海量数据的挑战和机遇。数据是企业的重要资产&#xff0c;能够帮助企业洞察市场动态、优化业务流程、提升客户满意度、创造竞争优势。然而&#xff0c;传统的BI&#xff08;商业智能&#xff0…

LVS - DR

LVS-DR 数据流向 客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。Director Server 和 Real Server 在同一个网络中&#xff0c;数据通过二层数据链路层来传…

Harvard transformer NLP 模型 openNMT 简介入门

项目网址&#xff1a; OpenNMT - Open-Source Neural Machine Translation logo&#xff1a; 一&#xff0c;从应用的层面先跑通 Harvard transformer GitHub - harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper. ​git clone https…

【C++小项目】实现一个日期计算器

目录 Ⅰ. 引入 Ⅱ. 列轮廓 Ⅲ. 功能的实现 构造函数 Print 判断是否相等 | ! ➡️: ➡️!: 判断大小 > | > | < | < ➡️>&#xff1a; ➡️<&#xff1a; ➡️>&#xff1a; ➡️<&#xff1a; 加减天数 | | - | - ➡️&#xff1a;…

【C# 基础精讲】LINQ 基础

LINQ&#xff08;Language Integrated Query&#xff09;是一项强大的C#语言特性&#xff0c;它使数据查询和操作变得更加简洁、灵活和可读性强。通过使用LINQ&#xff0c;您可以使用类似SQL的语法来查询各种数据源&#xff0c;如集合、数组、数据库等。本文将介绍LINQ的基础概…

简历考察点2_《CiCi-基于Vue3.0的智能音乐分享平台》

&#xff08;1&#xff09;项目初始化和推荐页面开发&#xff1a; 重点&#xff1a;轮播图、Scroll、下拉加载方法实现、 问题一&#xff1a;轮播图实现 ① 获取轮播图数据&#xff1a;虽然找到接口了&#xff0c;但是由于XHR请求在浏览器端会有跨域的限制&#xff0c;不能直…

2023 百度翻译 爬虫 js逆向 代码

js代码&#xff1a; const jsdom require("jsdom"); const {JSDOM} jsdom; const dom new JSDOM(<!DOCTYPE html><p>Hello world</p>); window dom.window; document window.document; XMLHttpRequest window.XMLHttpRequest;function n(t,…