MaBatis中的分页插件以及特殊字符处理

简介: MaBatis中的分页插件以及特殊字符处理

一、PageHelper介绍


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

官方网址:MyBatis 分页插件 PageHelper

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>


注意:必须配置在MyBatis.xml文件中的environments之上,这是框架规定的dtd约束,否则报错

607e1bd8e487481d800a58c527710df4.png


3.配置sql映射文件

我这里使用的返回结果类型和参数类型都是map类型,没必要和我一样,可以自己修改

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


后面的生成接口我就省略了,与上一篇mybatis动态sql是差不多的


4.测试代码

import com.github.pagehelper.PageHelper;
import com.wenhao.oa.impl.DeptImpl;
import com.wenhao.oa.mapper.DeptMapper;
import com.wenhao.oa.model.Dept;
import com.wenhao.oa.model.PageBean;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
/**
 * @ 用户  liwen
 * @当前日期 2023/8/23
 * @当前项目名称 ssm
 */
public class test {
    public static void main(String[] args) throws IOException {
        InputStream r = Resources.getResourceAsStream("mybatis.cfg.xml");
//        获取sqlsession对象
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(r);
//
        SqlSession sqlSession = build.openSession(true);
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        DeptImpl d= new DeptImpl();
        d.setDeptMapper(mapper);
//
//        List<Dept> query = d.query("财务部");
//        System.out.println(query);
//        int wenhao = d.insert(new Dept(7, "wenhao"));
//        System.out.println(wenhao);
        PageBean p= new PageBean();
        p.setPagination(true);
        p.setPage(2);
        p.setRows(2);
        PageHelper.startPage(p.getPage(),p.getRows());
        Map map= new HashMap();
        map.put("name","部");
        System.out.println(d.query1(map));
    }
}


测试结果:

c6f496f86d14477a8eb9e8606696d758.png


三、特殊字符处理


       在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中这是一种通用方案。


示例:

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


目录
相关文章
|
13天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
5天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
8天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
796 26
|
7天前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
511 42
|
7天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
513 43
|
2天前
|
文字识别 监控 物联网
这是我写的实施一地两检的跨境高铁站旅客资料预报系统的系统架构
本文设计了一套基于IAPIS理念的高铁跨境旅客预报与边检联动系统,覆盖青青草原内地与喜羊羊特别行政区间“一地两检”场景。系统在旅客购票后即采集证件、生物特征及行程信息,通过Advance Passenger Info Checker等模块,向出发地和目的地移民管理机构实时推送数据,实现出入境许可预审。支持线上/线下购票、检票、退票全流程管控,结合面部识别、行为追踪技术监控旅客状态,防止滞留或非法通行。列车发车前进行最终核验,确保所有跨境旅客获边检许可。若旅行被中途取消,系统自动改签、退票并通知各方,保障安全与效率。(239字)