DefaultReflectorFactory我的Mybatis版本里没有这个类
来源:3-8 _广告模块开发_分页标签封装
DirtyHands
2018-03-24
mybatis里找不到老师分页器导的这个类,显示没有,然后就有一直报错!!!
There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy32'
7回答
-
这部分内容在ssm学习路径里有详细介绍,讲mybatis的,那个需要认真学习后再看这个课内容。
012018-03-24 -
Unlimitedbladewo0
2018-04-05
我觉得分页拦截器这这东西其实真没必要自己写,其实有一些不错的轮子蛮好用的,比如:
Mybatis PageHelper 地址:https://pagehelper.github.io/
Mybatis Plus 地址:http://mp.baomidou.com/
完全开箱即用,自己写真的很浪费时间。
00 -
源生活
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) {
}
}022018-03-25 -
DirtyHands
提问者
2018-03-24
重新传的
00 -
源生活
2018-03-24
这样看不出来,异常信息上面还有一部分,也截出来,代码把代码行数调出来,显示代码行数,import所有的类的代码也截出来。
042018-03-24 -
DirtyHands
提问者
2018-03-24
......
00 -
源生活
2018-03-24
找不到拦截器相关的类的话,检查一下pom.xml是不是缺依赖,mybatis的版本和视频中是否一致
062018-03-24
IT段子手详解MyBatis遇到Spring 秒学Java SSM开发大众点评
1001 学习 · 485 问题
相似问题