pageHelper插件的使用(分页,实例)
程序员文章站
2022-07-05 23:23:37
...
mybatis的分页方法有很多,作者最常用的是limit和pageHelper。
mapper.xml
limit分页
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<!--
mysql:limit
postgresql:offset
oracle:三层rowNum嵌套(记不住,问navicat)
要分页必备两个要素:
总条数
每页多少条
-->
<select id="page_1" resultType="com.jinghangzz.mybatis.data.pojo.ADemoDynasty">
select * from a_demo_dynasty
limit 3,2
</select>
<!--
RowBounds
-->
<select id="page_2" resultType="com.jinghangzz.mybatis.data.pojo.ADemoDynasty">
select * from a_demo_dynasty
</select>
</mapper>
使用pageHelper进行分页
—>引入jar包
|—>|—>jsqlparser-3.1.jar
|—>|—>pagehelper-5.1.9.jar
想要使用pageHelper,必须在mybatis的核心配置文件中进行配置
mybatis.cfg.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>
<!-- 插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 参数
reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,
pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),
会查询最后一页。默认false 时,直接根据参数进行查询。
-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
<!-- 配置了一堆环境;jdbc的环境
default:默认的环境,配置environment的id
-->
<environments default="my">
<environment id="my">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/jinghangzz/mybatis/data/pojo/ADynastyMapper.xml"/>
</mappers>
</configuration>
测试代码
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.jinghangzz.mybatis.data.pojo.ADemoDynasty;
import com.jinghangzz.mybatis.data.test.BaseTest;
/**
* 分页
* 有三种
* @author TeaBig
*/
public class PageTest extends BaseTest
{
/**
* 分页的第一种
*/
@Test
public void page_1()
{
/* 获取链接
* SqlSession===Connection;
* */
SqlSession session = sqlSessionFactory.openSession() ;
this.logger.info("session:{}",session);
/*=========以上是加载驱动,获取链接==============*/
/*=========操作数据库==============*/
/*
* 查询多条:selectList
* 查询单条:selectOne
*
* 参数1:mapper文件中,namespace(如果sql语句的id在全局中是唯一的,那可以省略namespace)+sql语句的id
* */
List<ADemoDynasty> dynastyList = session.selectList("test.page_1");
/* 如何循环 */
final Map<String, Object> resultMap = new HashMap<String, Object>();
dynastyList.forEach( t ->
{
Integer count = 0 ;
if(resultMap.get("count") != null )
{
count = Integer.valueOf(resultMap.get("count") + "") ;
}
System.out.println(count + "==>" + t);
count ++ ;
resultMap.put("count",count);
});
/* 关闭链接 */
session.close();
}
/**
* 分页的第二种
*/
@Test
public void page_2()
{
/* 获取链接
* SqlSession===Connection;
* */
SqlSession session = sqlSessionFactory.openSession() ;
this.logger.info("session:{}",session);
/*=========以上是加载驱动,获取链接==============*/
/*=========操作数据库==============*/
/**
* limit ?,?
* 参数1:第一个?;表示从第几条开始
* 参数2:第二个?;表示往后查询多少条
*
* 分页相当的low;
* 一次性将sql语句全部查询出来,
* 在内存中进行分页;
* 如果数据库里面有100000000w条记录,难道也要一次性放到内存中?(这绝对不现实)
*/
RowBounds rowBounds = new RowBounds(2, 3);
/**
* 参数1:sql语句的Id
* 参数2:sql语句的参数(paramterType)
* 参数3:RowBounds
*/
List<ADemoDynasty> dynastyList = session.selectList("test.page_2",null,rowBounds);
/* 如何循环 */
final Map<String, Object> resultMap = new HashMap<String, Object>();
dynastyList.forEach( t ->
{
Integer count = 0 ;
if(resultMap.get("count") != null )
{
count = Integer.valueOf(resultMap.get("count") + "") ;
}
System.out.println(count + "==>" + t);
count ++ ;
resultMap.put("count",count);
});
/* 关闭链接 */
session.close();
}
/**
* 分页的第三种
* PageHelper
*/
@Test
public void page_3()
{
/* 获取链接
* SqlSession===Connection;
* */
SqlSession session = sqlSessionFactory.openSession() ;
this.logger.info("session:{}",session);
/*=========以上是加载驱动,获取链接==============*/
/*=========操作数据库==============*/
/* 一定要在调用selectList或者SelectOne之前调用此方法 */
/**
* 参数1:第几页
* 参数2:每页多少条
*
* 它会先查询总条数,
* 然后再查询分页的数据
*
* 分页的信息存储在page中
*/
Page page = PageHelper.startPage(10000, 3);
/**
* 参数1:sql语句的Id
* 参数2:sql语句的参数(paramterType)
* 参数3:RowBounds
*/
List<ADemoDynasty> dynastyList = session.selectList("test.page_2",null);
/* 一定要在调用selectOne或者selectList之后调用page查看分页信息 */
this.logger.info("分页信息:总条数:{},总页数:{},每页条数:{},当前页:{}",
page.getTotal(),page.getPages(),page.getPageSize(),page.getPageNum());
/* 如何循环 */
final Map<String, Object> resultMap = new HashMap<String, Object>();
dynastyList.forEach( t ->
{
Integer count = 0 ;
if(resultMap.get("count") != null )
{
count = Integer.valueOf(resultMap.get("count") + "") ;
}
System.out.println(count + "==>" + t);
count ++ ;
resultMap.put("count",count);
});
/* 关闭链接 */
session.close();
}
}
实际操作中,pageHelper相比其他方法而言,使用起来更加方便简单
****pageHelper必须在核心配置文件中配置,必须在调用sql语句之前调用PageHelper.startPage(),在调用sql语句之后查询分页信息
上一篇: 前端-ES6合集 持续更新
下一篇: generater 初理解