overridefun<T>getMapper(mapperClass: Class<*>): T { // 使用JDK动态代理为Dao接口生成代理对象 return Proxy.newProxyInstance( DefaultSqlSession::class.java.classLoader, arrayOf(mapperClass) ) { proxy, method, args -> // 底层还是执行JDBC // 准备参数1 // statemendid=namespace.id,获取不到 // statemendid=接口全限定名.方法名 val clazzName = method.declaringClass.name val methodName = method.name val statementId = "$clazzName.$methodName"
// 准备参数2:params=args
// 获取被调用方法的返回类型 val genericReturnType = method.genericReturnType // 判断是否进行了泛型类型参数化 if (genericReturnType is ParameterizedType) { selectList<Any>(statementId, *args) } else selectOne<Any>(statementId, *args) } as T }