springboot 怎么在mapper中获取调用的controller方法名
时间: 2024-05-15 10:17:26 浏览: 156
答:在Mapper中获取调用的Controller方法名可以通过AOP拦截器实现。具体操作步骤如下:
1. 定义一个切面类,在该类中定义一个@Before注解的方法,用于拦截Controller层的请求。
2. 在该方法中调用Thread.currentThread().getStackTrace()方法,获取方法调用栈,并通过反射获取Controller方法名。
3. 将Controller方法名添加进Mapper方法的参数中,以便在Mapper中进行调用。
4. 在springboot的配置文件中配置该拦截器即可。
下面是一个简单的示例代码:
```
@Aspect
@Component
public class MapperAspect {
@Before("execution(* com.example.demo.controller..*(..))")
public void before(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
String controllerMethodName = className + "." + methodName;
MapperParam.setControllerMethodName(controllerMethodName);
}
}
```
```
public class MapperParam {
private static ThreadLocal<String> controllerMethodName = new ThreadLocal<>();
public static String getControllerMethodName() {
return controllerMethodName.get();
}
public static void setControllerMethodName(String methodName) {
controllerMethodName.set(methodName);
}
}
```
在Mapper接口中添加参数,并在xml文件中调用即可:
```
public interface UserMapper {
User selectUserById(@Param("id") Integer id, @Param("controllerMethodName") String controllerMethodName);
}
```
```
<select id="selectUserById" resultType="com.example.demo.entity.User">
select * from user where id = #{id} and create_by = #{controllerMethodName}
</select>
```
注意,以上示例代码仅为演示目的,需要根据实际业务进行适当的修改和完善。
阅读全文