使用mybatis分页插件PageHelper5.0.0遇到的问题总结

原博主:http://blog.csdn.net/appleyk/article/details/77318175    感谢appleyk博主

最开始我的mybatis全局配置文件是这样写的:

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.   <!-- 配置分页插件 PageHelper -->  
  7.    <plugins>  
  8.      <plugin interceptor="com.github.pagehelper.PageHelper">      
  9.      </plugin>    
  10.    </plugins>  
  11. </configuration> 
运行后出现以下异常:

后面还有一行关键描述:

Cause: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor

意思就是说这个分页插件的Interceptor没有被实现

来看一下我的,PageHelper版本,以及com.github.pagehelper.PageHelper类

pageHelper是如何在mybatis中工作呢,是通过mybatis的pulgin实现了Interceptor接口,从而获得要执行的sql语句实现分页技术,而我们的PageHelper5.0.0版本中的这个类,并没有出现implements Interceptor,我们再来看下pagehelper这个包下的其他类,我们发现,有个类很像我们要的,我们进去一看,果然是它:

因此,我们修改我们的mybatis全局配置文件SqlMapConfig.xml如下:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.   <!-- 配置分页插件 PageHelper -->  
  7.    <plugins>  
  8.      <plugin interceptor="com.github.pagehelper.PageInterceptor">      
  9.      </plugin>    
  10.    </plugins>  
  11. </configuration>  
再次,运行如下:

这个会话工程"sqlSessionFactory"怎么又出来了,我们往后翻,发现有个关键描述:

Error parsing SQL Mapper Configuration. Cause: com.github.pagehelper.PageException: java.lang.ClassNotFoundException: mysql

没有发现mysql这个类,太折腾了,我也不想检查其他jar包是否版本不对了,这个后面有时间再去研究,网上说,PageHelper插件4.0.0以后的版本支持自动识别使用的数据库,可以不用配置 <property name="dialect" value="mysql"/>   

ok,没问题了,项目正常跑起来了

接着是测试:


package com.github.pagehelper;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xy.video.bean.User;
import com.xy.video.bean.UserExample;
import com.xy.video.dao.UserMapper;

public class TestPageHelper {  
	  
/** 
 * @throws Exception 
 * 2017年8月17日12:00:57 
 */  
@Test     
public void testPageHelper() throws Exception{  
      
       //1、获得mapper代理对象  
       //初始化一个spring容器     
       ApplicationContext   applicationContext = null;  
       try{  
         //获得spring上下文对象  
         applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");  
       }  
       catch (Exception ex) {  
        ex.printStackTrace();  
       }  
        
       //拿到一个代理对象  我们要操作的商品信息 在mapper映射类中,我们通过上下文对象拿到这个类的代理  
       UserMapper bean = applicationContext.getBean(UserMapper.class);  
       //2、设置分页处理  
       PageHelper.startPage(1, 20);//每页显示20条 相当于  SELECT * FROM taotao.tb_item limit 0,20;  
       //3、执行查询  
       UserExample example = new UserExample();  
       //Criteria criteria = example.createCriteria();  
       //criteria.andIdEqualTo(value) //这个是根据某个条件查 比如主键商品ID  
       List<User> list = bean.selectByExample(example);//example不设置 表示无条件 这个时候bean已经将分页效果(sql语句)作用在example上了  
         
       if(list != null & list.size()>0){  
           int i = 0;  
           for(User item : list){  
               System.out.println(item.getUserName()+","+(i+1));//输出商品的标题,一页20行  
               i++;  
           }  
       }     
       //4、取分页后的结果  
       //包装list       
       PageInfo<User> pageInfo = new PageInfo<>(list);  
       long total = pageInfo.getTotal();//总记录数  
       System.out.println("total:"+total);  
       int pages = pageInfo.getPages();  
       System.out.println("pages:"+pages);//总页数  
       int pageSize= pageInfo.getPageSize();  
       System.out.println("pageSize:"+pageSize);//每页的展示数  
        
   }  
      
} 


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值