mybatis custom paging solutions
1, PageSqlProvider <T> - provides a default paging list query
Package com.xinyartech.erp.core.base; Import com.xinyartech.erp.core.dto.page.PageDTO; / ** * abstract implementation Provider Default * * @author Lynch, * / public abstract class PageSqlProvider <T> { / ** * paging sql statement, pay attention: the outermost layer of the display field can not contain subqueries * * @return * @author Lynch * / protected abstract String preSql (pageDTO <T> pageDto); / ** * page list query * * @ param pageDto * @return * @author Lynch */ public String findAll(PageDTO<T> pageDto){ return preSql(pageDto); } /** * 统计分页总条数 * * @return * @author Lynch */ public String countAll(PageDTO<T> pageDto){ String sql = preSql(pageDto); String countSql = "select count(1) " + sql.substring(sql.indexOf("from"), sql.length()); return countSql; } }
2, StudentMapper.java - inherited PageSqlProvider <T>, re preSql (), automatically paging query and the total number of queries
package com.xinyartech.erp.system.mapper; import java.util.List; import org.apache.ibatis.annotations.SelectProvider; import com.xinyartech.erp.core.base.PageSqlProvider; import com.xinyartech.erp.core.dto.page.PageDTO; import com.xinyartech.erp.system.dto.RoleResourceDTO; import com.xinyartech.erp.system.model.SysButton; public interface StudentMapper { @SelectProvider(type = StudentProvider.class, method = "findAll") public List<SysButton> querySysButtonList(PageDTO<RoleResourceDTO> pageDto); @SelectProvider(type = StudentProvider.class, method = "countAll") public Long count(PageDTO<RoleResourceDTO> pageDto); class StudentProvider extends PageSqlProvider<RoleResourceDTO> { @Override protected String preSql(PageDTO<RoleResourceDTO> pageDto) { String sql = "select * from sys_button where 1=1"; if(pageDto.getParameters().getRoleId() != null) { sql +=" and id=" + pageDto.getParameters().getRoleId(); } return sql; } } }