昨天发现一个超级好用的插件,简单记录下用法,当然也可以直接去看文档链接在这里分页查询插件使用 PageHelper 你只需要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar。
如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.1</version>
</dependency>
配置拦截器插件
在 MyBatis 配置 xml 中配置拦截器插件
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
或者
在 Spring 配置文件中配置拦截器插件
使用 spring 的属性配置方式,可以使用 plugins 属性像下面这样配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
**params=value1**
</value>
</property>
</bean>
</array>
</property>
</bean>
其中属性配置需要根据自己的使用场景配置,配置好就可以在程序用使用了
controller中的method
/*前台获取foods列表,而且实现分页*/
@RequestMapping(value = "/selectByPageNumSize",method = RequestMethod.GET)
public String getList(Model model,
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "6") int rows) {
int pageNum;
Integer total=foodService.selectTotalFood();
if(total%rows!=0){
pageNum=total/rows+1;
}else{
pageNum=total/rows;
}
List<Food> foods = foodService.selectByFood( page, rows);
model.addAttribute("foods",foods);
model.addAttribute("page", page);
model.addAttribute("rows", rows);
model.addAttribute("total",total);
model.addAttribute("pageNum",pageNum);
return "forward:../before/detail/caidan.jsp";
}
Service中对selectByFood的实现
public List<Food> selectByFood(int page, int rows) {
//分页查询 只需要在要执行分页查询的sql语句前执行即可实现分页查询
PageHelper.startPage(page, rows);
return foodMapper.listAllFoods();
}
page是1 pageSize默认是6
DEBUG [http-apr-8080-exec-8] - ==> Preparing: select * from food ,foodtype where food.foodType_id=foodtype.id LIMIT 6
DEBUG [http-apr-8080-exec-8] - ==> Parameters:
DEBUG [http-apr-8080-exec-8] - <== Total: 6
page是2 pageSize默认是6
DEBUG [http-apr-8080-exec-9] - ==> Preparing: select * from food ,foodtype where food.foodType_id=foodtype.id LIMIT 6,6
DEBUG [http-apr-8080-exec-9] - ==> Parameters:
DEBUG [http-apr-8080-exec-9] - <== Total: 6
这里用的mysql数据库,当然啦这个插件还支持的数据库文档中可以看到,是不是超好用?!