你知道mybatis的分页查询有哪几种实现方式吗?具体是怎样去实现的呢?下面就是要给大家详细的介绍一下这方面的问题。
这里的话分别总结了mybatis5种实现分页查询的方法:
UserMapper.java接口文件
public interface UserMapper { //分页查询 public List < User > selectForPage1(int startIndex, int pageSize); public List < User > selectForPage2(Map < String, Object > map); public Integer selectCount(); public List < User > selectForPage3(PageBean pageBean); //分页加模糊查询 public Integer selectCount2(String keywords); public List < User > selectForPage4(Map < String, Object > map); }
工具类PageBean.java
public class PageBean { private Integer currentPage; private Integer startIndex; private Integer pageSize = 5; private Integer totalCount; private Integer totalPage; public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; this.startIndex = (this.currentPage - 1) * this.pageSize; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalCount() { return totalCount; } public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; //计算总页数 this.totalPage = (int) Math.ceil((this.totalCount * 1.0 / this.pageSize)); } public Integer getTotalPage() { return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getStartIndex() { return startIndex; } public void setStartIndex(Integer startIndex) { this.startIndex = startIndex; } }
UserMapper.xml文件
在这当中,查询5是模糊加分页查询语句
<?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"> <!-- namespace和Mapper接口类名字一样 --> <mapper namespace="com.gx.mapper.UserMapper"> <!-- 查询1 --> <select id="selectForPage1" resultType="User"> select * from user limit #{param1},#{param2} </select> <!-- 查询2--> <select id="selectForPage2" resultType="User"> select * from user limit #{startIndex},#{pageSize} </select> <!-- 查询3--> <select id="selectAll" resultType="User"> select * from user </select> <!-- 查询总条数--> <select id="selectCount" resultType="java.lang.Integer"> select count(*) from user </select> <!-- 查询4--> <select id="selectForPage3" resultType="User"> select * from user limit #{startIndex},#{pageSize} </select> <!-- 查询5--> <select id="selectForPage4" resultType="User"> select * from user where name like "%"#{keywords}"%" or address like "%"#{keywords}"%" limit #{startIndex},#{pageSize} </select> <!-- 模糊查询查询总条数--> <select id="selectCount2" resultType="java.lang.Integer" parameterType="java.lang.String"> select count(*) from user where name like "%"#{value}"%" or address like "%"#{value}"%" </select> </mapper>
测试test
在这当中,方法6是模糊加分页查询测试
public class myTest { SqlSession session = MyBatisUtils.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); @Test public void selectForPage1() { int currentPage=1; int pageSize=5; List <User> selectForPage = userMapper.selectForPage1((currentPage-1)*pageSize, pageSize); for (User user : selectForPage) { System.out.println(user); } MyBatisUtils.closeSession(session); } @Test public void selectForPage2() { int currentPage=1; int pageSize=5; Map <String , Object> map=new HashMap<>(); map.put("startIndex", (currentPage-1)*pageSize); map.put("pageSize", pageSize); List <User> selectForPage = userMapper.selectForPage2(map); for (User user : selectForPage) { System.out.println(user); } MyBatisUtils.closeSession(session); } @Test public void selectForPage3() { int currentPage=1; int pageSize=5; /** * 参数1:开始条 偏移量,下标 * 参数2:参数总条数 */ RowBounds rowBounds = new RowBounds((currentPage-1)*pageSize, pageSize); //使用mybatis里面提供的api去写的 List <User> list = session.selectList("com.gx.mapper.UserMapper.selectAll", null, rowBounds); for (User user : list) { System.out.println(user); } MyBatisUtils.closeSession(session); } @Test public void selectForPage4() { Integer count = userMapper.selectCount(); System.out.println(count); int currentPage=1; int pageSize=5; Map <String , Object> map=new HashMap<>(); map.put("startIndex", (currentPage-1)*pageSize); map.put("pageSize", pageSize); List <User> list = userMapper.selectForPage2(map); for (User user : list) { System.out.println(user); } System.out.println("当前第"+currentPage+"页,共"+count+"条"); MyBatisUtils.closeSession(session); } @Test public void selectForPage5() { PageBean bean = new PageBean(); bean.setCurrentPage(1); bean.setPageSize(5); //查询总条数 Integer count = userMapper.selectCount(); //放到pageBean bean.setTotalCount(count); List <User> list = userMapper.selectForPage3(bean); for (User user : list) { System.out.println(user); } System.out.println("当前第"+bean.getCurrentPage()+"页,共"+count+"条"); MyBatisUtils.closeSession(session); } @Test public void selectForPage6() { String keywords="云6"; PageBean bean = new PageBean(); bean.setCurrentPage(1); bean.setPageSize(5); //查询总条数 Integer count = userMapper.selectCount2(keywords); //放到pageBean 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.selectForPage4(map); for (User user : list) { System.out.println(user); } System.out.println("当前第"+bean.getCurrentPage()+"页,共"+count+"条"); MyBatisUtils.closeSession(session); } }
之前也给大家介绍过mybatis分页插件实现的相关内容,感兴趣的朋友可以去了解一下,除此之外,请多多的关注奇Q工具网吧,更多java常见问题及解决方法可以为你分享呢。
推荐阅读: