最近要做个分页功能,看到了Mybatis的分页插件PageHelper这个工具,使用非常的简单,但是在使用的过程中遇到了不少的坑,因为封装的完美,你使用的过程中只要几句代码就可以实现分页了,这是自己的体会。好了,下面开始分享我使用的方法以及一些坑。
一. 先在pom.xml文件中加入PageHelper依赖。
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
二. 在mybatis-config.xml的配置文件中加入以下配置(比较推荐这种配置,注意plugins是有顺序的,
- properties(属性)
- settings(全局配置参数)
- typeAiases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境集合属性对象)mappers(映射器)
- environment(环境子属性对象)
- transactionManager(事物管理)
- datesource(数据源)
8. mappers(映射器) )
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库
<property name="dialect" value="mysql" /> -->
</plugin>
</plugins>
</configuration>
或者在spring配置文件中加入以下配置(这里有时候配置会出现问题,控制台会报错,当初就是这里遇到坑,没能解决,用了上面的配置,如果你配置的没有问题请指教一下,互相学习,哈哈):
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="com.entity" />
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
<!-- 配置分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value> dialect=mysql reasonable=true </value>
</property>
</bean>
</array>
</property>
</bean>
三. 接下来就是Java代码了
1. 首先就是mapper里的sql语句了
<select id="selectUserList" parameterType="Integer" resultMap="user">
select * from user
</select>
2. 接着就是DAO层的代码了
List<User> selectUserList(Integer page);
3. 再接着就是Service层代码了
@Override
public List<User> selectUserList(Integer page) {
return userDao.selectUserList(page);
}
4. 最后就是Controller 层代码了
@RequestMapping(value="index")
@ResponseBody
public JSONObject showUserList(Model model,
@RequestParam(required=true,defaultValue="1") Integer page,
@RequestParam(required=false,defaultValue="10") Integer pageSize){
//PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageHelper.startPage(page, 10);
List<User> userList = userService.selectUserList(page);
PageInfo<User> pageInfo = new PageInfo<User>(userList);
long total = pageInfo.getTotal(); //总记录数
int pages = pageInfo.getPages(); //总页数
pageSize = pageInfo.getPageSize(); //每页的展示条数
JSONObject obnJsonObject = new JSONObject();
obnJsonObject.put("msg", userList);
return obnJsonObject;
// model.addAttribute("page", pageInfo);
// model.addAttribute("userList",userList);
// return "showuser";
}
前端jsp的代码这里就没提供了,下面的一篇经验帖有说明,最后就是神奇的事情发生了
以上是简单的一些应用,如有不足的请大神们指教。
这里再附上一篇经验帖和另两篇博客:
https://jingyan.baidu.com/article/b907e62784c48446e7891c90.html
https://blog.csdn.net/qq_26790807/article/details/62429290
https://blog.csdn.net/appleyk/article/details/77318175
以及mybatis-Config.xml全局配置文件解析: