使用Mybatis拦截器实现分页,类似aop的效果.拦截sql语句,修改为分页查询语句.
1、引入pagination inteceptor拦截器和分页page
2、在sqlMapConfig.xml中配置拦截器插件
<!-- 分页拦截器,拦截用户提交的查询,只查询当前页数据;提高响应速度。 -->
<plugins>
<plugin interceptor="cn.itcast.jk.pagination.PageInterceptor">
<property name="databaseType" value="oracle"/>
</plugin>
</plugins>
3、在mapper文件中添加分页方法
注意参数:params.fullName,参数封装的Page.params Map集合中,所以调用时要到其中获取。
<!-- 带条件分页查询 -->
<select id="findPage" parameterType="cn.itcast.jk.pagination.Page" resultMap="factoryRM">
select * from FACTORY_C
where 1=1
<if test="params.fullName != null">and FULL_NAME like #{params.fullName}</if>
<if test="params.state != null">and STATE = #{params.state}</if>
order by ORDER_NO
</select>
4、实现dao、service
5、controller中调用
//查询
@RequestMapping("/basicinfo/factory/list.action")
public String list(String fullName, Model model, Page<Factory> page){
//设置查询条件
Map<String, Object> params = new HashMap<String, Object>();
if(fullName!=null&&!fullName.equals("")){
params.put("fullName", "%" + fullName + "%");
}
params.put("state", 1);
page.setParams(params);
List<Factory> dataList = factoryService.findPage(page);
model.addAttribute("dataList", dataList);
model.addAttribute("pageLinks", page.pageLinks("list.action"));
return "/basicinfo/factory/jFactoryList.jsp";
}
Page.java:
package cn.itcast.jk.pagination;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 对分页的基本数据进行一个简单的封装
*/
public class Page<T> {
private int pageNo = 1; //页码,默认是第一页
private int pageSize = 3; //每页显示的记录数,默认是10
private int totalRecord; //总记录数
private int totalPage; //总页数
private List<T> results; //对应的当前页记录
private Map<String, Object> params = new HashMap<String, Object>(); //其他的参数我们把它分装成一个Map对象
public int getPageNo() {
return pageNo;
}
public void