创建PageBean对象
参数
currentPage 当前页pageSize 页容量totalCount 数据总条数total 总页数startIndex 每页起始索引提供getter/setter方法
每页起始索引需要通过当前页和页容量计算获得
this.startIndex = (this.currentPage - 1) * this.pageSize;总页数需要通过数据总条数和页容量计算获得
this.totalPage = (int)Math.ceil(this.totalCount * 1.0 / this.pageSize);添加Mapper接口
public List<User> queryForPage(PageBean pageBean);Mapper.xml
<select id="queryForPage" resultType="com.example.domain.User"> SELECT * FROM sys_user LIMIT #{startIndex},#{pageSize} </select>测试代码
@Test public void queryForPage1(){ PageBean bean = new PageBean(); bean.setCurrentPage(1); bean.setPageSize(5); //查询总条数,并且设置给bean Integer count = userMapper.queryCount(); bean.setTotalCount(count); List<User> list = userMapper.queryForPage(bean); for(User user : list){ System.out.println(user); } }添加Mapper接口
public List<User> queryForPage2(Map<String,Object> map); public Integer queryCount(String keywords);Mapper.xml
<!-- 模糊查询 --> <select id="queryForPage2" resultType="com.example.domain.User"> SELECT * FROM sys_user WHERE name LIKE "%"#{keywords}"%" LIMIT #{startIndex},#{pageSize} </select> <!-- 模糊查询总条数 --> <select id="queryCount2" resultType="java.lang.Integer" parameterType="java.lang.String"> SELECT COUNT(*) FROM sys_user WHERE name LIKE "%"#{keywords}"%" </select>测试代码
@Test public void queryForPage2(){ String keywords = "1"; PageBean bean = new PageBean(); bean.setCurrentPage(1); bean.setPageSize(5); Integer count = userMapper.queryCount2(); bean.setTotalCount(count); Map<String, Object> map = new HashMap<>(); map.put("startIndex", bean.getStartIndex()); map.put("pageSize", bean.getPageSize()); map.put("keywords", keywords); List<User> list = userMapper.queryForPage2(map); for(User user : list){ System.out.println(user); } }原理: 使用Mapper接口的代理对象调用方法的时候,方法会被拦截,拦截后改变sql语句,本质是动态代理(aop)
需要jar包
pagehelper-5.1.6.jarjsqlparser-1.3.jar在mybatis.cfg.xml中配置插件
<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"> </plugin> </plugins>Mapper接口
public List<User> queryForPage(User user);Mapper.xml
<select id="queryForPage" resultType="com.example.domain.User"> SELECT * FROM sys_user </select>测试代码
@Test public void queryForPage(){ User user = new User(); PageBean bean = new PageBean(); bean.setCurrentPage(1); bean.setPageSize(5); //默认会查询总条数 Page<User> page = PageHelper.startPage(bean.getCurrentPage(),bean.getPageSize()); List<User> list = userMapper.queryForPage(user); for(User u : list){ System.out.println(u); } }