目录
一、PageHelper介绍
二、PageHelper使用
1. 导入pom依赖
2. Mybatis.cfg.xml 配置拦截器
配置sql映射文件
测试代码
特殊字符处理
2. 使用CDATA 区段
一、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>