springboot当中配置mybatis分页插件

这篇文章主要介绍了spring boot集成pagehelper,记录使用pagehelper的两种配置方式。

一、直接使用pagehelper

1、导入依赖

其他依赖我就没有复制了,这些依赖主要是记录一下版本,因为springboot和pagehelper集成的时候,版本不对会出各种问题甚至项目启动不起来。我用的是springboot1.5.12.RELEASE+pagehelper4.1.3

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.12.RELEASE</version>
	<relativePath/>
</parent>
<dependencies>
	<!-- mybatis -->
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>1.1.1</version>
	</dependency>
	<!-- mybatis 依赖的分页组件 -->
	<dependency>
		<groupId>com.github.pagehelper</groupId>
		<artifactId>pagehelper</artifactId>
		<version>4.1.3</version>
		<scope>compile</scope>
	</dependency>
</dependencies>

2、配置pagehelper

可能有的项目不用mybatis配置文件,没有的话需要加上,在springboot配置文件当中指定mybatis配置文件路径。

mybatis:
# 指定全局配置文件位置  
  config-location: classpath:mybatis-config.xml
<?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>
	    <!-- com.github.pagehelper为PageHelper类所在包名 -->
	    <plugin interceptor="com.github.pagehelper.PageHelper">
	        <property name="dialect" value="mysql"/>
	        <!-- 该参数默认为false -->
	        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
	        <!-- 和startPage中的pageNum效果一样-->
	        <property name="offsetAsPageNum" value="true"/>
	        <!-- 该参数默认为false -->
	        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
	        <property name="rowBoundsWithCount" value="true"/>
	        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
	        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
	        <property name="pageSizeZero" value="true"/>
	        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
	        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
	        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
	        <property name="reasonable" value="true"/>
	        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
	        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
	        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
	        <!-- 不理解该含义的前提下,不要随便复制该配置 -->
	        <property name="params" value="pageNum=start;pageSize=limit;"/>
	    </plugin>
    </plugins>
</configuration>

3、代码写法

controller层代码

	// 不分页
	@RequestMapping(value = "/findUserList",method = RequestMethod.GET)
	public List<User> findUserList() {
    
    
		return userService.findUserList();
	}
	
	// 单纯的分页,不需要分页信息
	@RequestMapping(value = "/findUserListByPage",method = RequestMethod.GET)
	public List<User> findUserListByPage() {
    
    
		PageHelper.startPage(1, 5);
		return userService.findUserList();
	}
	
	// 分页,直接使用PageInfo封装分页相关信息
	@RequestMapping(value = "/findUserListByPageInfo",method = RequestMethod.GET)
	public PageInfo<User> findUserListByPageInfo() {
    
    
		PageHelper.startPage(1, 5);
		List<User> list = userService.findUserList();
		PageInfo<User> pageInfo = new PageInfo<User>(list);
		return pageInfo;
	}
	
	// 分页,利用page获取分页信息,然后封装map
	@RequestMapping(value = "/findUserListByPage1",method = RequestMethod.GET)
	public Map<String, Object> findUserListByPage1() {
    
    
		Map<String, Object> result = new HashMap<>();
		// 设置分页,1代表第一页,5代表这一页有五条数据
		Page<User> page = PageHelper.startPage(1, 5);
		userService.findUserList();
		result.put("total", page.getTotal());
		result.put("pageNo", page.getPageNum());
		result.put("pages", page.getPages());
		result.put("pageSize", page.getPageSize());
		result.put("rows", page.getResult());
		return result;
	}

service层代码

	@Autowired
	private UserMapper userMapper;
	
	public List<User> findUserList() {
    
    
		return userMapper.findUserList();
	}

xml代码

<select id="findUserList" resultType="com.gzl.cn.domain.User">
    SELECT * FROM user
</select>

map方式查询出来的结果:

二、使用pagehelper-spring-boot-starter

1、导入依赖

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.12.RELEASE</version>
	<relativePath/>
</parent>
<dependencies>
	<!-- mybatis -->
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>1.1.1</version>
	</dependency>
	<!--分页插件 pagehelper -->
	<dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

2、配置pagehelper

#分页pageHelper
pagehelper:
  helperDialect: mysql
  reasonable: true  #为了使用输入页数为负或者超出最大页时候使页数为最小或最大值
  supportMethodsArguments: true
  params: count=countSql
  pageSizeZero: true

·helper-dialect:

配置使用哪种数据库语言,不配置的话pageHelper也会自动检测

·reasonable:

配置分页参数合理化功能,默认是false。 #启用合理化时,如果pageNum<1会查询第一页,如果pageNum>总页数会查询最后一页; #禁用合理化时,如果pageNum<1或pageNum>总页数会返回空数据。

·params:

为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值; 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。

·support-methods-arguments:

支持通过Mapper接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。

pageSizeZero
pageSize=0 or RowBounds.Limit = 0的时候就不适用分页,但是返回对象还是PageInfo

三、PageInfo参数

使用PageInfo相当于查出来的属性特别多,速度上会有一定的影响。
下面记录了一下他的分页属性备注。

pageNum=1,当前页码
pageSize=1,每页个数
size=1,当前页个数
startRow=1,由第几条开始
endRow=1,到第几条结束
total=3,总条数
pages=3,总页数
list= XXXX 查出出来的数据集合
prePage=0,上一页
nextPage=2,下一页
isFirstPage=true,是否为首页
isLastPage=false,是否为尾页
hasPreviousPage=false,是否有上一页
hasNextPage=true,是否有下一页
navigatePages=8,每页显示的页码个数
navigateFirstPage=1,首页
navigateLastPage=3,尾页
navigatepageNums=[1, 2, 3]}页码数

四、注意

建议不要使用PageInfo来封装结果,性能特别差。

下面这个还是仅仅有十几条数据的表,假如数据量大的话,可见性能有多么差。

使用pageInfo速度:

不用pageInfo直接用page取结果速度:

如果需要分页信息建议使用map封装page结果比较好点,我们公司的项目基本上都是这么用的。

猜你喜欢

转载自blog.csdn.net/weixin_43888891/article/details/119714502