账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何用annotation 注解方式加载 mybatis interceptor
    25
    0

    项目中用到了mybatis interceptor。 如果是用xml方式加载interceptor,可以是这样:

    <plugins>
        <plugin interceptor="com.foo.FooInterceptorForQry"></plugin>
    </plugins>

    但是项目用了spring boot, 没有xml。 这种情况下如何用annatation 注解方式加载mybatis 注解呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 雪落成殇 普通会员 1楼

      在MyBatis中,我们可以使用Annotations来配置Interceptor,以加载自定义Interceptor。以下是一个简单的例子,演示如何使用Annotation来加载一个名为MyInterceptor的Interceptor:

      首先,创建一个注解类,如MyInterceptor,它有一个方法before和一个方法after,分别用于在前后执行前后调用的代码:

      ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.HandlerMapping; import org.springframework.web.method.annotation.InterceptorMapping; import org.springframework.web.method.annotation.InterceptorAdapter;

      @Configuration public class MyInterceptorConfig { @Bean public HandlerMapping myHandlerMapping() { return new HandlerMapping("/myinterceptor"); }

      @Bean
      public InterceptorAdapter myInterceptorAdapter() {
          return new MyInterceptor();
      }
      
      @InterceptorMapping
      public void myBeforeInterceptor(HandlerExecutionChain chain) throws Exception {
          // 在此方法中添加你的前后执行代码
          chain.doAfterArgumentHandlingCompleted();
      }
      
      @InterceptorMapping
      public void myAfterInterceptor(HandlerExecutionChain chain) throws Exception {
          // 在此方法中添加你的前后执行代码
          chain.doAfterArgumentHandlingFailed();
      }
      

      } ```

      在上述代码中,我们创建了一个名为MyInterceptorConfig的@Configuration类,其中包含了两个@Bean注解。第一个@Bean注解用于定义HandlerMapping,它用于解析HandlerMapping注解中的路径,即/myinterceptor。第二个@Bean注解用于定义InterceptorAdapter,它是一个自定义Interceptor,它有一个before方法和一个after方法,分别用于在前后执行前后调用的代码。

      myHandlerMapping注解中,我们指定了我们的拦截器在/myinterceptor路径下被扫描。在myInterceptorAdapter注解中,我们定义了一个自定义Interceptor,它有一个before方法和一个after方法,分别用于在前后执行前后调用的代码。

      myBeforeInterceptor方法中,你可以添加你的前后执行代码,例如:

      ``java public void myBeforeInterceptor(HandlerExecutionChain chain) throws Exception { // 在此方法中添加你的前后执行代码 // 假设你有一个名为processData`的方法,它接受一个参数,并返回一个结果 // 在这里,你可以执行一些数据处理操作,例如从数据库查询数据,然后返回处理后的结果 chain.doAfterArgumentHandlingCompleted(); }

      public void myAfterInterceptor(HandlerExecutionChain chain) throws Exception { // 在此方法中添加你的前后执行代码 // 假设你有一个名为handleException的方法,它接受一个异常对象,然后返回一个处理后的结果 // 在这里,你可以处理异常,例如将异常对象传递给下一个拦截器,或者将其作为参数传递给另一个方法 chain.doAfterArgumentHandlingFailed(); } ```

      myAfterInterceptor方法中,你可以添加你的前后执行代码,例如:

      ``java public void myAfterInterceptor(HandlerExecutionChain chain) throws Exception { // 在此方法中添加你的前后执行代码 // 假设你有一个名为handleException的方法,它接受一个异常对象,然后返回一个处理后的结果 // 在这里,你可以处理异常,例如将异常对象传递给下一个拦截器,或者将其作为参数传递给另一个方法 // 你可以将异常对象转换为自定义对象,然后传递给handleException`方法进行处理 chain.doAfterArgumentHandlingFailed(); }

      // 在调用处理器之前调用myBeforeInterceptor方法 chain.handleBeforeArgumentHandlingCompleted();

      // 在调用处理器之后调用myAfterInterceptor方法 chain.handleAfterArgumentHandlingFailed(); ```

      这就是如何使用Annotation在MyBatis中加载自定义Interceptor的方式。你可以根据你的具体需求,定义和配置你的Interceptor,然后在你的处理器中使用它们。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部