1 分页插件介绍
- 分页可以将很多条结果进行分页显示。
- 如果当前在第一页,则没有上一页。如果当前在最后一页,则没有下一页。
需要明确当前是第几页,这一页中显示多少条结果。
MyBatis分页插件总结
1.在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。
2.PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单。
2 分页插件的使用
MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据
开发步骤:
①导入与PageHelper的jar包
②在mybatis核心配置文件中配置PageHelper插件
<!-- 注意:分页助手的插件 配置在通用mapper之前 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 指定方言 --> <property name="dialect" value="mysql"/> </plugin>
③测试分页数据获取
@Test public void testPageHelper(){ //设置分页参数 PageHelper.startPage(1,2); List<User> select = userMapper2.select(null); for(User user : select){ System.out.println(user); } }
3 分页插件的参数获取
获得分页相关的其他参数:
//其他分页的数据 PageInfo<User> pageInfo = new PageInfo<User>(select); System.out.println("总条数:"+pageInfo.getTotal()); System.out.println("总页数:"+pageInfo.getPages()); System.out.println("当前页:"+pageInfo.getPageNum()); System.out.println("每页显示长度:"+pageInfo.getPageSize()); System.out.println("是否第一页:"+pageInfo.isIsFirstPage()); System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
4 分页插件知识小结
分页:可以将很多条结果进行分页显示。
- 分页插件 jar 包: pagehelper-5.1.10.jar jsqlparser-3.1.jar
- :集成插件标签。
分页助手相关 API
- PageHelper:分页助手功能类。
- startPage():设置分页参数
- PageInfo:分页相关参数功能类。
- getTotal():获取总条数
- getPages():获取总页数
- getPageNum():获取当前页
- getPageSize():获取每页显示条数
- getPrePage():获取上一页
- getNextPage():获取下一页
- isIsFirstPage():获取是否是第一页
- isIsLastPage():获取是否是最后一页
5 分页插件的使用
第一步:导分页jar包
去maven库找一个
第二步: 集成分页助手插件
在主配置文件的typeAliases标签后添加如下代码
<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins>
第三步:添加查询全部功能
UserDao接口中新添加的方法
List<User> findAll();
UserMapper中添加以下配置
<select id="findAll" resultType="user"> select * from `user` </select>
第四步:测试类中使用分页
@Test public void testPage()throws Exception{ /*1.读取配置文件并创建SqlSessionFactory*/ InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); /*2.获取sqlSession[这是mybatis的重要API, 使用它可以操作数据库crud*/ SqlSession sqlSession = sqlSessionFactory.openSession(); /*3.查询第一页的数据,每页显示2条*/ PageHelper.startPage(1,2); /*4.由Mybatis框架创建UserDao的实现类对象,我们称为代理对象*/ UserDao userDao = sqlSession.getMapper(UserDao.class); /*5.创建查询条件并调用接口的条件查询方法*/ List<User> users = userDao.findAll(); /*6.释放资源*/ sqlSession.close(); //测试查询结果 PageInfo<User> pi = new PageInfo<>(users); System.out.println("总页数:"+pi.getPages()); System.out.println("总记录数:"+pi.getTotal()); System.out.println("每页显示条数:"+pi.getPageSize()); System.out.println("当前第:"+pi.getPageNum()+"页"); }
查看结果
总页数:3 总记录数:5 每页显示条数:2 当前第:1页
分页的业务层代码
接口
package cn.oldlu.service; import cn.oldlu.domain.User; import com.github.pagehelper.PageInfo; public interface UserService { /** * 分页的业务层代码 * @param pageNum 第几页 * @param pageSize 每页显示的记录数 * @return 分页相关的所有的数据,都封装到了PageInfo,PageInfo中有什么数据,不需要太过关注 * @throws Exception */ PageInfo<User> pageQuery(Integer pageNum, Integer pageSize)throws Exception; }
package cn.oldlu.service.impl; import cn.oldlu.dao.UserDao; import cn.oldlu.domain.User; import cn.oldlu.service.UserService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.util.List; public class UserServiceImpl implements UserService { @Override public PageInfo<User> pageQuery(Integer pageNum, Integer pageSize)throws Exception { SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); //分页的代码 //1.设置页码和每页显示的数据 PageHelper.startPage(pageNum,pageSize); //2.调用查询所有的方法 List<User> list = userDao.findAll(); //3.把查询到的结果封装到PageInfo对象 PageInfo<User> pageInfo = new PageInfo<>(list); sqlSession.close(); return pageInfo; } }