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

来源:3-8 _广告模块开发_分页标签封装

DirtyHands

2018-03-24

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

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

写回答

7回答

源生活

2018-03-24

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

0
1
DirtyHands
确实是这个样子
2018-03-24
共1条回复

Unlimitedbladewo0

2018-04-05

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

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

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

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

0
0

源生活

2018-03-24

嗯,从已经看见的代码和异常看不出来什么问题,你这个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
2
源生活
回复
DirtyHands
那可能是部署有问题,下次再出现这种情况,把工程clean一下,然后重新添加到tomcat下
2018-03-25
共2条回复

DirtyHands

提问者

2018-03-24

//img.mukewang.com/szimg/5ab5f106000180be18971369.jpg

//img.mukewang.com/szimg/5ab5f1070001ac4714472272.jpg

重新传的

0
0

源生活

2018-03-24

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

0
4
DirtyHands
回复
源生活
ok,,,
2018-03-24
共4条回复

DirtyHands

提问者

2018-03-24

......

0
0

源生活

2018-03-24

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

0
6
DirtyHands
回复
源生活
已经上传,我检查了几遍确实导对类了,而且从异常上看,执行到第二句就不行了,那个delegate的对象都没拿到,后边的就无从谈起了
2018-03-24
共6条回复

IT段子手详解MyBatis遇到Spring 秒学Java SSM开发大众点评

【毕设】SSM全面梳理,前后端分离,zTree 和复杂SQL打造权限系统,解惑MyBatis和RESTful

1001 学习 · 485 问题

查看课程