mybatis拦截器分页问题。intercept有时候不执行

问题描述

mybatis拦截器分页问题。intercept有时候不执行

我在SSM工程中使用mybatis拦截器做分页,但是拦截器的intercept有时候执行有时候不执行,不知道为什么,程序员没有没有经验呢?谢谢赐教

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

private static String sqlId = "";

private static String dialect = "";

public Object intercept(Invocation inv) throws Throwable {
System.out.println("到了");
RoutingStatementHandler handler = (RoutingStatementHandler) inv.getTarget();
StatementHandler delegate = (StatementHandler)ReflectionUtils.getFieldValue(handler, "delegate");
MappedStatement mappedStatement = (MappedStatement) ReflectionUtils.getFieldValue(delegate, "mappedStatement");

if(mappedStatement.getId().matches(sqlId)) { //只拦截id包含pages的SQL
BoundSql bound = delegate.getBoundSql();

//获得当前绑定Sql的参数对象
Object object = bound.getParameterObject();
if(object == null) {
return inv.proceed();
}
if(object instanceof PageEntity<?>) {
PageEntity<?> page = (PageEntity<?>)object;
String sql = bound.getSql();

String pageSql = getPageSql(sql, page);
ReflectionUtils.setFieldValue(bound, "sql", pageSql);
}
}
return inv.proceed();
}

public String getPageSql(String sql, PageEntity<?> page) {
//此处省略SQL拼接代码
return pageSql.toString();
}

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

public void setProperties(Properties property) {
sqlId = property.getProperty("sqlId"); //".*Pages*.*"
dialect = property.getProperty("dialect"); //"oracle"
}

}

配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<mappers>
    <mapper resource="com/cifpay/user/entity/User.sqlMap.xml" />
    <mapper resource="com/cifpay/role/entity/Role.sqlMap.xml" />
    <mapper resource="com/cifpay/menu/entity/Menu.sqlMap.xml"/>
    <mapper resource="com/cifpay/role/entity/RoleMenuMap.sqlMap.xml"/>
    <mapper resource="com/cifpay/role/entity/UserRoleMap.sqlMap.xml"/> 

 </mappers>
时间: 2024-11-03 22:11:34

mybatis拦截器分页问题。intercept有时候不执行的相关文章

java MyBatis拦截器Inteceptor详细介绍_java

有许多java初学者对于MyBatis拦截器Inteceptor不是很了解,在这里我来为各位整理下篇关于java中MyBatis拦截器Inteceptor详解, 本文主要分析MyBatis的插件机制,实际就是Java动态代理实现的责任链模式实现. 根据官方文档.Mybatis只允许拦截以下方法,这个决定写拦截器注解签名参数.  代码如下  Executor (update, query, flushStatements, commit, rollback, getTransaction, clo

Mybatis拦截器的实现介绍_java

 MyBatis介绍 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .它支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的

ssh-SSH框架中的过滤器,拦截器,监听器的作用和执行顺序

问题描述 SSH框架中的过滤器,拦截器,监听器的作用和执行顺序 如题,网上搜了一些资料看了一下,还不是很清楚,求各位大神指导 解决方案 http://www.cnblogs.com/tonyY/p/5168836.html 解决方案二: 首先,过滤器是在请求到达Server端之前执行的,或者响应结果到达客户端之前.功能是在服务器和客户端中间增加了一个中间层(类似于外观模式中间也是加了一层~~),可以对两者之间的交互进行统一的处理,每一个客户端提交的请求都需要通过过滤器的处理, 然后再进行其他的操

java中MyBatis拦截器Inteceptor详解

本文主要分析MyBatis的插件机制,实际就是Java动态代理实现的责任链模式实现. 根据官方文档.Mybatis只允许拦截以下方法,这个决定写拦截器注解签名参数.  代码如下 复制代码 Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler (getParameterObject, setParameters) ResultSetH

java利用mybatis拦截器统计sql执行时间示例_java

可以根据执行时间打印sql语句,打印的sql语句是带参数的,可以拷贝到查询分析器什么的直接运行 复制代码 代码如下: package mybatis; import java.text.DateFormat;import java.util.Date;import java.util.List;import java.util.Locale;import java.util.Properties; import org.apache.ibatis.executor.Executor;import

Struts2拦截器---intercept()方法返回值

问题描述 Struts2拦截器---intercept()方法返回值 Struts2拦截器方面的intercept()方法的返回值有什么用?

【SpringMVC整合MyBatis】springmvc拦截器-定义和配置

拦截器 1.拦截定义 定义拦截器,实现HandlerInterceptor接口.接口中提供三个方法. package cn.edu.hpu.ssm.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.

SpringMVC 中的Interceptor 拦截器(HandlerInteceptor)

作用 一切请求都可以进去拦截,然后添加前后的处理逻辑 有点像是AOP 可以用在 1.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 2.像12306 那样子判断当前时间是否是购票时间. 3.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 4.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录

拦截器详解

在之前的文章中,我们已经涉及到了拦截器(Interceptor)的概念.  downpour 写道 拦截器是AOP中的概念,它本身是一段代码,可以通过定义"织入点",来指定拦截器的代码在"织入点"的前后执行,从而起到拦截的作用.正如上面 Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦截器的代码. 接下来,我们将重点讨论一下Struts2中的拦截器的内部结