一、PageHelper介绍
PageHelper 是 Mybatis 的一个插件,这里就不扯了,就是为了更加便捷的进行分页查询。
官方网址:MyBatis 分页插件 PageHelper
PageHelper插件的优点:
- 物理分页:支持常见的 12 种数据库Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等...
- 支持多种分页方式:支持常见的RowBounds(PageRowBounds),PageHelper.startPage 方法调用,Mapper 接口参数调用。
- 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约束,否则报错
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)); } }
测试结果:
三、特殊字符处理
在mybatis中我们经常用到特殊字符动态拼接语句,如经常使用到 大于(>,>=)、小于(<,<=)、不等于(<> ,!=)符号。Mybatis使用的 *.xml文件格式,需要在尖括号进行相关的转义或者使用 CDATA 区段。
1. 使用转义字符
特殊字符 转义字符
< | < |
> | > |
& | & |
" | " |
’ | ' |
<= | <= |
>= | >= |
示例:
<select id="listPager" resultType="java.util.Map" parameterType="java.util.Map"> select * from t_mvc_book where price < 9 and price > 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>