Mybatis分页查询

mac2022-07-05  25

Mybatis分页查询

传统查询方式

创建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); } }

使用阿里分页查询插件-PageHelper

原理: 使用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); } }
最新回复(0)