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>


目录
相关文章
|
4天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
6天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
403 93
|
6天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
399 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
6天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
291 158
|
14天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。