Dao层拦截器之MyBatis实现
--------------------------------------
基本原理
----------
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。 如果你想做的不仅仅是监控方法的调用,那么你最好相当了解要重写的方法的行为。 因为如果在试图修改或重写已有方法的行为的时候,你很可能在破坏 MyBatis 的核心模块。 这些都是更低层的类和方法,所以使用插件的时候要特别当心。
通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可。
MyBatis支持插件, 插件要求实现 Interceptor 接口.
插件示例:
// ExamplePlugin.java
@Intercepts({@Signature(
type= Executor.class,
method = "update",
args = {MappedStatement.class,Object.class})})
public class ExamplePlugin implements Interceptor {
private Properties properties = new Properties();
public Object intercept(Invocation invocation) throws Throwable {
// implement pre processing if need
Object returnObject = invocation.proceed();
// implement post processing if need
return returnObject;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
}
插件加载;
<!-- mybatis-config.xml -->
<plugins>
<plugin interceptor="org.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>
分享到:
相关推荐
在MyBatis中,拦截器通过实现`Interceptor`接口来创建。`OpeInfoInterceptor`类就是这样一个拦截器,它使用了`@Intercepts`注解来指定拦截的目标。`@Signature`注解用来精确定义拦截的方法,这里是`Executor`类的`...
分页拦截器的核心思想是减少业务代码的侵入性,避免在每个需要分页的Service或DAO层都需要手动处理分页参数。它通过拦截Mapper接口的方法调用,分析方法签名和传入参数,从中获取分页信息,然后动态构造出分页SQL,...
MyBatis 分页拦截器是实现数据库查询分页效果的一种高效解决方案。在传统的SQL查询中,我们通常需要手动编写分页语句,但这容易出错且不易维护。通过使用分页拦截器,我们可以将分页逻辑封装起来,使得在编写Mapper...
MyBatis拦截器分页是实现...通过这样的方式,我们就可以利用MyBatis拦截器实现动态的分页查询,而无需在每个Mapper接口或DAO层的实现中手动添加分页语句。这种解耦的设计使得代码更加简洁,同时也便于维护和扩展。
MyBatis拦截器是一种强大的工具,允许开发者在DAO层和数据库之间进行额外的处理。通过拦截器,可以实现诸如分页、插入和更新时间/人、数据权限、SQL监控日志等功能,从而提高开发效率。 MyBatis支持四种对象拦截:...
拦截器非常适合用来添加分页逻辑,避免在每个 DAO 层都需要手动编写分页 SQL。 1. **Interceptor 接口**: - MyBatis 的 Interceptor 接口中定义了一个 intercept 方法,该方法接收 Invocation 对象作为参数,这个...
MybatisDAO是一个基于Java的持久层框架,它与Struts2、Spring3.0和MySQL数据库相结合,构建了一个高效、灵活的数据访问层。这个压缩包文件"**Mybatis_dao.rar_mybatis_dao_mybatis_dao.rar**"包含了实现这个集成项目...
1. **SpringMVC的角色**:在权限管理中,SpringMVC可以通过拦截器(Interceptor)实现对请求的预处理。拦截器可以在请求到达目标控制器之前执行某些操作,如检查用户登录状态、验证权限等。通过自定义拦截器,我们...
通过这种方式,我们可以在不修改原有DAO层接口的情况下,利用Mybatis拦截器实现高效的分页功能。这种方法避免了对每个分页查询都编写相同的分页逻辑,降低了代码的复杂度,提高了开发效率。同时,由于分页逻辑集中...
此外,MyBatis的ResultMap可以自动将查询结果映射到Java对象,简化了数据访问层(DAO)的实现。 项目的构建和依赖管理使用了Maven,这是一个强大的Java项目管理工具。通过在pom.xml文件中声明项目依赖,Maven会自动...
Struts2的核心特性包括:强大的拦截器机制、灵活的配置方式以及丰富的插件支持。 二、MyBatis框架 MyBatis是一个优秀的持久层框架,它简化了JDBC的复杂操作,允许开发者将SQL语句直接写在XML配置文件或者注解中,...
MyBatis3在这个项目中用于数据库操作,通过XML配置文件或注解方式定义SQL语句,与Spring4配合使用,可以实现DAO层的事务管理。 4. **jQuery AJAX**:这是一个JavaScript库,用于简化DOM操作、事件处理和AJAX交互。...
在这个"ssm_拦截器demo"中,我们可以看到一个基于SSM的简单项目配置,以及一个自定义拦截器的实现,这是学习SSM框架和理解拦截器机制的好材料。 首先,我们来看看SSM框架的基础。Spring是整个项目的基石,它提供了...
在本示例中,"ssm整合的jar和mybatis分页代码,mybatis生成工具类" 提供了实现SSM整合时所需的一些关键组件,包括MyBatis的分页拦截器和代码生成工具。 首先,`PaginationInterceptor.java` 文件是MyBatis的分页...
Mybatis Interceptor 拦截器的实现 Mybatis Interceptor 拦截器的实现是 Mybatis 框架中的一种重要机制,通过拦截器可以改变 Mybatis 的默认行为,例如 SQL 重写等。拦截器的实现主要基于责任链模式,通过动态代理...
6. **MyBatis拦截器与事务控制**:MyBatis提供了一个拦截器机制,可以通过自定义拦截器来扩展事务管理功能,比如实现事务的乐观锁或者读写分离策略。 7. **源码分析**:对于深入理解MyBatis的事务管理,阅读其源码...
6. **配置 DispatcherServlet**:设置 Spring MVC 的拦截器、视图解析器等。 7. **编写 Controller**:创建 Controller 处理 HTTP 请求,调用 Service 实现业务逻辑。 通过这种方式,Spring MVC 负责应用的控制流,...
它解决了JSP中的Action和业务逻辑分离的问题,提供了强大的请求处理机制和拦截器(Interceptor)体系,使开发者可以自定义行为和拦截特定请求。在整合中,Struts2作为前端控制器,负责接收用户请求,调度到相应的...
Struts2是Java Web开发中的一个开源框架,它简化了构建基于Java EE Web应用程序的过程,通过拦截器机制来处理用户请求,并将其转发到相应的业务逻辑。 "学生信息管理系统"通常包括学生信息的增删改查、分页显示等...
在Struts2中,Action类是业务逻辑的载体,配置在struts.xml文件中,通过拦截器链来处理请求和响应。Struts2还提供了丰富的结果类型,如dispatcher(转发)和stream(流式下载),以及强大的OGNL表达式语言,用于在...