1.为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
步骤:
1.导入分页插件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.在mybatis的全局配置文件mybatis-config.xml中配置该插件
<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
3.Mapper.xml方法:
<select id="list10" resultType="java.util.Map" parameterType="java.util.Map">
select
<include refid="Base_Column_List" />
from t_mvc_book
where 1=1
<if test="bname!=null and bname != '' ">
and bname like #{bname}
</if>
</select>
4.mapper方法:
@Resource
public interface BookMapper {
List<Map> list10(Map map);
}
5.xxxServiceImpl:
@Autowired
private BookMapper bookMapper;
@Override
public List<Map> list10(Map map, PageBean pageBean) {
/**
*
* jdbc:
* map-->来自于jsp
* baseDao
* 1.getContSql-->total-->pageBean.setTotal
* 2.setPageSql-->List<T>-->返回
*
* hibernate:
* map-->来自于jsp
* baseDao
* 1.getContSql-->total-->pageBean.setTotal
* 2.不需要拼接出pageHql-->hibernate.setFirst../setMaxRes..
* mybatis中借助github提供的pageHelper:
* pageHelper.start
*
* 业务流程
*
* pageBean.setTotal
*
*/
if(pageBean!=null&&pageBean.isPagination())
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
List<Map> list = this.bookMapper.list10(map);
if(pageBean!=null&&pageBean.isPagination()){
PageInfo pageInfo = new PageInfo();
pageBean.setTotal(pageInfo.getTotal()+"");
}
return list;
}
6.测试:
@Autowired
private BookService bookService;
@Test
public void list10() {
Map map=new HashMap();
PageBean pageBean = new PageBean();
//pageBean.setPage(2);
// map.put("bname","%aa%");
List<Map> list=this.bookService.list10(map,pageBean);
for (Map map1 : list) {
System.out.println(map1);
}
}