springboot整合mybatis,mybatis的拦截器不能使用

u010789776 2018-09-12 03:13:31
springboot整合mybatis,mybatis的拦截器不能使用,没用springboot的时候,直接在mybatis的配置文件里面添加个 plugin 就可以,换了springboot,mybatis的配置文件没有了,不知道怎么注册拦截器了。
以前mybatis配置文件配置如下:
<plugins>
<plugin interceptor="com.utstar.bi.interceptors.SqlInterceptorCount"></plugin>
</plugins>

springboot的拦截器如下:
@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { MappedStatement.class, Object.class }) })
//@Service 启动报错
//@Component 启动报错
public class SqlInterceptorCount implements Interceptor {

private Logger log = LoggerFactory.getLogger(SqlInterceptorCount.class);
private static final ObjectFactory DEFAULT_OBJECT_FACTORY = new DefaultObjectFactory();
private static final ObjectWrapperFactory DEFAULT_OBJECT_WRAPPER_FACTORY = new DefaultObjectWrapperFactory();
private static final ReflectorFactory DEFAULT_REFLECTOR_FACTORY = new DefaultReflectorFactory();

@Override
public Object intercept(Invocation invocation) throws Throwable {

StatementHandler statementHandler = (StatementHandler) invocation.getTarget();

MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, DEFAULT_OBJECT_FACTORY,
DEFAULT_OBJECT_WRAPPER_FACTORY,DEFAULT_REFLECTOR_FACTORY);

MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");

HashMap mapParam = (HashMap) metaStatementHandler.getValue("delegate.boundSql.parameterObject");


.
.
.


}catch (Exception e){
// e.printStackTrace();
}
// 继续执行拦截之前的操作

return invocation.proceed();
}

@Override
public Object plugin(Object o) {
return null;
}

@Override
public void setProperties(Properties properties) {

}
}

跪求各位路过的大神指点,谢谢大家
...全文
1256 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxd66666 2019-08-22
  • 打赏
  • 举报
回复
@Component public interface TenantMapper { int deleteByPrimaryKey(@Param("id") Integer id); int deleteByPrimaryKeys(@Param("primaryKeys") Integer[] primaryKeys); int insert(Tenant record); int insertSelective(Tenant record); Tenant selectByPrimaryKey(@Param("id") Integer id); int updateByPrimaryKeySelective(Tenant record); } 我加了@Component还是会报错,我的这个是接口直接访问.xml的sql的,还是会A component required a bean named 'tenantMapper' that could not be found.
u010789776 2018-09-14
  • 打赏
  • 举报
回复
感谢各位大佬,问题已经解决了,加个@Component注解就可以,返回空是因为plugin方法没有实现,return null 了
u010789776 2018-09-12
  • 打赏
  • 举报
回复
引用 3 楼 u012910326 的回复:

前几天自己刚写过一个类似的,可以参考下看看。


不好意思,是mybatis的拦截器
u010789776 2018-09-12
  • 打赏
  • 举报
回复
引用 2 楼 yugehasaki666 的回复:
https://blog.csdn.net/htf2620032/article/details/79305208

看下这个吧 。你按这个做,没准就可以


不好意思,是mybatis的拦截器
verejava 2018-09-12
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复

前几天自己刚写过一个类似的,可以参考下看看。
宇哥hasaki丶 2018-09-12
  • 打赏
  • 举报
回复
https://blog.csdn.net/htf2620032/article/details/79305208

看下这个吧 。你按这个做,没准就可以
u010789776 2018-09-12
  • 打赏
  • 举报
回复
在网上看到有说,直接加个@Component 注解的,加了之后,启动就报错了

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧