SpringMVC+mybatis+Spring整合PageHelper插件
该项目非maven项目,需要手动加入jar包
一、引入jar包
pagehelper-5.1.8.jar
jsqlparser-1.2.jar
二、mybatis中配置pagehelper插件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--属性设置-->
<properties>
<!-- 查询结果集最大限制。避免因sql写法有误或条件设置不合理导致查询出大量结果集造成的内存溢出 -->
<property name="maxLimitResultset" value="10000"/>
</properties>
<!-- 基础设置 -->
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="false" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- SIMPLE:默认;REUSE:批量更新操作缓存SQL以提高性能; BATCH:批量更新模式,提高更新效率,但获取不到影响行数。-->
<setting name="defaultExecutorType" value="REUSE" />
<!-- 数据库超过600秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="600" />
</settings>
<!-- 类型处理 -->
<typeHandlers>
<!--Start: oracle特有类型处理器注册。后续如还有其他类型不能正确处理,按此添加类型处理器即可。 -->
<typeHandler javaType="oracle.sql.CLOB" jdbcType="CLOB" handler="org.apache.ibatis.type.ClobTypeHandler" />
<typeHandler javaType="oracle.sql.BLOB" jdbcType="BLOB" handler="org.apache.ibatis.type.BlobTypeHandler" />
<typeHandler javaType="oracle.sql.NCLOB" jdbcType="NCLOB" handler="org.apache.ibatis.type.NClobTypeHandler" />
<!--End: oracle特有类型处理器注册。后续如还有其他类型不能正确处理,按此添加类型处理器即可。 -->
</typeHandlers>
<!-- 插件配置 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="reasonable" value="true" />
<property name="offsetAsPageNum" value="true"/>
<property name="rowBoundsWithCount" value="true"/>
</plugin>
</plugins>
</configuration>
三、sqlSessionFactory配置mybatis文件路径
spring-config.xml
<!--扫描mapper接口-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.mvc.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- Mybatis's sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="DataSource"/>
<!-- mybatis配置文件路径 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<!-- sql文件扫描路径 -->
<property name="mapperLocations" value="classpath:sql/oracle/**/*.xml"/>
</bean>
四、新建PageData类
package com.test.mvc.controller;
import java.io.Serializable;
import java.util.List;
public class PageData<E> implements Serializable {
private long total;
private int currPage = 1;
private int pageSize = 10;
private List<E> rows;
public PageData() {
}
public List<E> getRows() {
return this.rows;
}
public void setRows(List<E> rows) {
this.rows = rows;
}
public long getTotal() {
return this.total;
}
public void setTotal(long total) {
this.total = total;
}
public int getCurrPage() {
return this.currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getPageSize() {
return this.pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
使用方法:
controller层
@RequestMapping(value ="/queryList")
public Object queryList(Map<String, Object> params) {
PageData<Map<String,Object>> pageData = new PageData<Map<String,Object>>();
PageInfo<Map<String,Object>> pageInfo = reportManagementService.queryList(params);
if(!pageInfo.getList().isEmpty()) {
pageData.setRows(pageInfo.getList());//需要展示的数据
pageData.setPageSize(pageInfo.getPageSize());//展示行
pageData.setCurrPage(pageInfo.getPageNum());//展示当前页
pageData.setTotal(pageInfo.getTotal());//共多少条
}else{
pageData.setRows(new ArrayList<>());
}
return pageData;
}
service层
/**
* 获取数据
* @param params
* @return
*/
public PageInfo<Map<String, Object>> queryJlList(Map<String, Object> params) {
if (params.get("page") != null && params.get("rows") != null) {
Integer page = Integer.parseInt(params.get("page").toString());
Integer rows = Integer.parseInt(params.get("rows").toString());
PageHelper.startPage(page, rows);
}
List<Map<String, Object>> datalist = this.commissionMapper.queryList(params);
PageInfo pageInfo = new PageInfo(datalist);
pageInfo.setPageSize(10);
return pageInfo;
}
接口层
package com.test.mvc.mapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
@Mapper
public interface commissionMapper{
List<Map<String, Object>> queryList(Map<String, Object> params);
}