随手笔记之Mapper接口实例化

随手笔记之Mapper接口实例化



背景

已获取到对应Mapper的类,需要实例化Mapper,已调用其中的方法。


一、使用步骤

1.创建InterfaceInstanceUtil工具类

代码如下(示例):

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSession;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 接口实例化工具类
 *
 * @author woodFang
 * @date : 2024-4-23
 */
@Slf4j
public class InterfaceInstanceUtil implements InvocationHandler {

    private Object target;
    private static SqlSession sqlSession;

    public InterfaceInstanceUtil() {
    }

    public InterfaceInstanceUtil(Object target) {
        this.target = target;
    }

    public static Object newInstance(Class<?> converter) {
        return Proxy.newProxyInstance(
                converter.getClassLoader(),
                new Class[]{converter},
                new InterfaceInstanceUtil(sqlSession.getMapper(converter)));
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        return method.invoke(target, args);
    }

    public static void init(SqlSession sqlSession) {
        InterfaceInstanceUtil.sqlSession = sqlSession;
        log.info("[init][初始化 InterfaceInstanceUtil 成功]");
    }
}

2.初始化InterfaceInstanceUtil

代码如下(示例):

    @Bean
    @SuppressWarnings("InstantiationOfUtilityClass")
    public InterfaceInstanceUtil interfaceInstanceUtil(SqlSession sqlSession) {
        InterfaceInstanceUtil.init(sqlSession);
        return new InterfaceInstanceUtil();
    }

3.使用示例

代码如下(示例):

//构造对象
BaseMapperX<?> baseMapperX = (BaseMapperX<?>) InterfaceInstanceUtil.newInstance(converter);
baseMapperX.getMapByFields(javaField, excelField);

其中converter为我获取到的BaseMapperX<?>类,通过InterfaceInstanceUtil.newInstance()方法构造对象,并成功调用baseMapperX 的getMapByFields方法


参考链接

  1. java反射调用mapper中的接口
  2. Mybatis反射实现装载Mapper
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值