请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

DefaultReflectorFactory我的Mybatis版本里没有这个类

mybatis里找不到老师分页器导的这个类,显示没有,然后就有一直报错!!!

 There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy32'

正在回答

7回答

这部分内容在ssm学习路径里有详细介绍,讲mybatis的,那个需要认真学习后再看这个课内容。

0 回复 有任何疑惑可以回复我~
  • 提问者 DirtyHands #1
    确实是这个样子
    回复 有任何疑惑可以回复我~ 2018-03-24 10:13:46
Unlimitedbladewo0 2018-04-05 01:18:30

我觉得分页拦截器这这东西其实真没必要自己写,其实有一些不错的轮子蛮好用的,比如:

Mybatis PageHelper 地址:https://pagehelper.github.io/

Mybatis Plus 地址:http://mp.baomidou.com/

完全开箱即用,自己写真的很浪费时间。

0 回复 有任何疑惑可以回复我~
源生活 2018-03-24 22:06:51

嗯,从已经看见的代码和异常看不出来什么问题,你这个MetaObject对象确实有问题,导致metaObject.getValue("delegate.mappedStatement")执行不起来,我提供一下视频里这个类的代码,你放到你工程里替换你这个拦截器,看看能不能执行:


package org.imooc.dao.interceptor;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.imooc.bean.BaseBean;
import org.imooc.bean.Page;

@Intercepts({@Signature(type=StatementHandler.class,method="prepare",args={Connection.class})})
public class PageInterceptor implements Interceptor{

    public Object intercept(Invocation arg0) throws Throwable {
        StatementHandler statementHandler = (StatementHandler)arg0.getTarget();
        MetaObject metaObject = MetaObject.forObject(statementHandler, SystemMetaObject.DEFAULT_OBJECT_FACTORY, SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,new DefaultReflectorFactory());
        MappedStatement mappedStatement = (MappedStatement)metaObject.getValue("delegate.mappedStatement");
        String id = mappedStatement.getId();
        if(id.endsWith("ByPage")) {
            BoundSql boundSql = statementHandler.getBoundSql();
            String sql = boundSql.getSql();
            String countSql = "select count(*) from(" + sql + ")t";
            Connection conn = (Connection)arg0.getArgs()[0];
            PreparedStatement statement = conn.prepareStatement(countSql);
            ParameterHandler parameterHandler = (ParameterHandler)metaObject.getValue("delegate.parameterHandler");
            parameterHandler.setParameters(statement);
            ResultSet rs = statement.executeQuery();
            BaseBean bean = (BaseBean)boundSql.getParameterObject();
            Page page = bean.getPage();
            if(rs.next()) {
                page.setTotalNumber(rs.getInt(1));
            }
            String pageSql = sql + " limit " + (page.getCurrentPage() - 1) * page.getPageNumber() + "," + page.getPageNumber();
            metaObject.setValue("delegate.boundSql.sql", pageSql);
        }
        return arg0.proceed();
    }

    public Object plugin(Object arg0) {
        return Plugin.wrap(arg0, this);
    }

    public void setProperties(Properties arg0) {
        
    }

}


0 回复 有任何疑惑可以回复我~
  • 提问者 DirtyHands #1
    我没有做任何改动突然又正常了········
    回复 有任何疑惑可以回复我~ 2018-03-25 07:49:40
  • 源生活 回复 提问者 DirtyHands #2
    那可能是部署有问题,下次再出现这种情况,把工程clean一下,然后重新添加到tomcat下
    回复 有任何疑惑可以回复我~ 2018-03-25 08:01:24
提问者 DirtyHands 2018-03-24 14:33:01

https://img1.sycdn.imooc.com//szimg/5ab5f106000180be18971369.jpg

https://img1.sycdn.imooc.com//szimg/5ab5f1070001ac4714472272.jpg

重新传的

0 回复 有任何疑惑可以回复我~
源生活 2018-03-24 12:11:35

这样看不出来,异常信息上面还有一部分,也截出来,代码把代码行数调出来,显示代码行数,import所有的类的代码也截出来。

0 回复 有任何疑惑可以回复我~
  • 提问者 DirtyHands #1
    已经重新上传
    回复 有任何疑惑可以回复我~ 2018-03-24 14:33:16
  • 提问者 DirtyHands #2
    老师抽空帮我看看吧 ,真的无能为力了,照说逻辑上也不难,找原因找的源码我都快背出来了,delegate我打断点跟踪,最后是得到个method=null然后抛出了这个异常
    回复 有任何疑惑可以回复我~ 2018-03-24 17:45:35
  • 源生活 回复 提问者 DirtyHands #3
    暂时不方便,暂时我只能在手机上看,手机上图片不清楚,等我方便用电脑的时候再说
    回复 有任何疑惑可以回复我~ 2018-03-24 17:49:03
提问者 DirtyHands 2018-03-24 11:39:48

......

0 回复 有任何疑惑可以回复我~
源生活 2018-03-24 10:02:49

找不到拦截器相关的类的话,检查一下pom.xml是不是缺依赖,mybatis的版本和视频中是否一致

0 回复 有任何疑惑可以回复我~
  • 提问者 DirtyHands #1
    老师版本改对之后,这个错误又不明白了  
    There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy32'
    回复 有任何疑惑可以回复我~ 2018-03-24 10:32:08
  • ssm学习路径里mybatis,那里面的分页你能运行吗?你先把那个搞懂
    回复 有任何疑惑可以回复我~ 2018-03-24 10:35:44
  • 提问者 DirtyHands 回复 源生活 #3
    老师,您的自动回复机器人我也看了几遍了,那个的mybatis版本是3.2.7的 里面的MetaObject.forObject()方法里有三个参数,在这套课程里,版本是3.3.0,参数变成了四个,但是不管我使用哪个版本,哪种写法都会报这个错误,这个问题已经困扰我几天了,我的jdk是1.7的,会不会问题出在这
    回复 有任何疑惑可以回复我~ 2018-03-24 11:16:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信