mybatis 如何通过Invocation获取调用mapper的方法名
时间: 2024-05-29 12:13:22 浏览: 226
mybatis 通过 Invocation 对象的 getMethod() 方法可以获取当前调用的方法名。具体来说,在 MapperProxy 中,所有对 Mapper 接口方法的调用都会被转换成对 InvocationHandler 的 invoke() 方法的调用。在 invoke() 方法中,我们可以通过 Invocation 对象获取当前调用的方法名以及对应的参数。
相关问题
mybatis 如何通过Invocation获取表的主键
可以通过以下步骤获取表的主键:
1. 在 Mybatis 的 Mapper 文件中给出 SQL 语句:SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=#{tableName} AND CONSTRAINT_SCHEMA=#{databaseName} AND CONSTRAINT_NAME='PRIMARY'.
2. 在对应的 Mapper 接口中编写方法,方法的输入参数为表名 tableName 和数据源名称 databaseName。
3. 在 SqlSessionInterceptor 中修改 Invocation 对象,将参数传递给对应的 Mapper 方法。
4. 在 Mapper 方法中调用 SQL 语句,并将结果作为 String 返回。
springboot mybatis拦截器拦截特定mapper
在Spring Boot中使用MyBatis拦截器来拦截特定的Mapper方法,你可以通过实现`Interceptor`接口来创建自定义的拦截器,并在拦截器中定义你想要的逻辑。以下是一个示例:
首先,创建一个实现了`Interceptor`接口的自定义拦截器类,例如`MyInterceptor`。在该类中,你可以重写`intercept`方法,在方法内部实现你的拦截逻辑。例如,下面的示例中通过判断Mapper类型来拦截特定的Mapper方法:
```java
@Intercepts({
@Signature(type = UserMapper.class, method = "getUserById", args = {Long.class})
})
public class MyInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 在这里实现你的拦截逻辑
System.out.println("Before getUserById method");
// 继续执行被拦截的方法
Object result = invocation.proceed();
// 在这里实现你的拦截逻辑
System.out.println("After getUserById method");
return result;
}
}
```
然后,在你的Spring Boot配置类中将自定义拦截器添加到MyBatis的配置中。例如:
```java
@Configuration
public class MyBatisConfig {
@Autowired
private MyInterceptor myInterceptor;
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 添加自定义拦截器
Interceptor[] interceptors = new Interceptor[]{myInterceptor};
sessionFactory.setPlugins(interceptors);
return sessionFactory.getObject();
}
}
```
在上述示例中,我们将自定义拦截器`MyInterceptor`添加到了MyBatis的配置中,并通过`setPlugins`方法设置了拦截器。这样,当调用`UserMapper`接口中的`getUserById`方法时,拦截器的拦截逻辑就会被触发。
需要注意的是,上述示例中只拦截了`UserMapper`接口中的`getUserById`方法,你可以根据自己的需求,通过修改`@Signature`注解中的参数来拦截其他的Mapper方法。另外,你也可以创建多个自定义拦截器,并将它们按照需要添加到MyBatis配置中。
阅读全文