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

【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.lryc.cn/news/137959.html

相关文章:

  • C语言练习1(巩固提升)
  • eCharts热力图Y轴左上角少一块
  • RabbitMQ介绍
  • 玩转软件|钉钉个人版内测启动:AI探索未来的工作方式
  • 【Linux】一张图了解系统文件
  • 自动化测试平台seldom-platform部署及使用
  • 2023年8月第3周大模型荟萃
  • win11 设置小任务栏
  • 在 React 中获取数据的6种方法
  • Docker基础入门:常规软件安装与镜像加载原理
  • redis初识
  • 死锁的典型情况、产生的必要条件和解决方案
  • 日志搞不定?手把手教你如何使用Log4j2
  • 基于Googlenet深度学习网络的交通工具种类识别matlab仿真
  • R语言04-R语言中的列表
  • [Linux]进程概念
  • GEE/PIE遥感大数据处理与应用
  • ● 647. 回文子串 ● 516.最长回文子序列
  • Mysql group by使用示例
  • 淘宝商品详情采集接口item_get-获得淘宝商品详情(可高并发线程)
  • uniapp写公众号h5开发 附件上传 下载功能
  • 机器学习基础09-审查分类算法(基于印第安糖尿病Pima Indians数据集)
  • C++ sort与优先队列排序的区别
  • 【Rust】Rust学习 第十九章高级特征
  • C++ 纯虚函数和虚函数的区别
  • Go中的有限状态机FSM的详细介绍 _
  • Python入门教程 | Python3 基本数据类型
  • STM32移植u8g2玩转oled 用软件iic实现驱动oled
  • C++ 学习系列 -- string 实现
  • C语言小练习(三)