一个代理对象调用另一个代理对象(mybatis mapperproxy)引发参数类型不匹配

zpgglvta  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(246)

我用一个代理调用另一个代理失败。总是引发参数类型不匹配异常。有人能帮忙吗?
这是密码。

// 1, use mybatis sqlSessionFactory create a Proxy object for MapperProxy.
@Suppress("UNCHECKED_CAST")
private fun <T> createMapper(sqlSessionFactory: SqlSessionFactory, clazz: Class<T>): T {
    return Proxy.newProxyInstance(
        clazz.classLoader,
        arrayOf(clazz),
        KtMapperProxy(
            sqlSessionFactory.configuration.getMapper(
                clazz,
                sqlSessionFactory.openSession()
            )
        )
    ) as T
}

// 2, this class is the Proxy class.
class KtMapperProxy<T>(private val mapper: T) : InvocationHandler {
    override fun invoke(proxy: Any, method: Method, args: Array<Any?>?): Any {
        return method.invoke(mapper, args)
    }
}

// 3, here is the UserMapper class method be called.
fun getById(@Param("id") id: Long): User

// 4, this is test.
@Test
fun `test mapper query`() {
    val userMapper = DataSourceHelper.getMapper(sqlSessionFactory, UserMapper::class.java)
    assertEquals(userMapper.getById(1L).username, "user_1")
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题