package com.xxj.mybatis.sqlsession.proxy;
import com.xxj.mybatis.cfg.Mapper;
import com.xxj.mybatis.utils.Executor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.util.Map;
/**
* @author xxj
* InvocationHandler接口的实现类,用于代理对象接口增强
*/
public class MapperProxy implements InvocationHandler {
//map的key是全限定类名+方法名,
private Map<String, Mapper> mappers;
private Connection conn;
public MapperProxy(Map<String, Mapper> mappers,Connection conn) {
this.mappers=mappers;
this.conn = conn;
}
/**
* 用于对方法进行增强,我们的增强其实就是调用selectList方法
* @param proxy
* @param method
* @param args
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//1.方法名
String methodName = method.getName();
//2.获取方法所在类的全限定类名
String className = method.getDeclaringClass().getName();
//3.组合key
String key = className+"."+methodName;
System.out.println("key========:"+key);
//4.获取mappers中的mapper对象
Mapper mapper =mappers.get(key);
//5.判断mapper对象是否存在
if(mapper == null){
throw new IllegalArgumentException("传入的参数有误!");
}
//6.调用工具类执行查询,需要传入一个连接对象
return new Executor().selectList(mapper,conn);
}
}
自定义Mybatis——MapperProxy类
最新推荐文章于 2024-10-05 20:55:01 发布