Mybatis接口Mapper内的方法为啥不能重载?Mapper的源码分析

本文探讨了Mybatis接口Mapper中为何不能方法重载,通过分析自定义JDK动态代理机制,揭示Mybatis自动映射器Mapper的底层实现。关键在于动态代理使用接口方法的全限定名作为查找SQL的依据,重载会导致键冲突。同时,文章还对Mybatis的源码进行了简要分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

精髓:动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。

言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投鞭断流的霸权,连目标target都不要的科幻模式。

注:本文默认认为,读者对动态代理的原理是理解的,如果不明白target的含义,难以看懂本篇文章,建议先理解动态代理。

本文分享给需要面试刷题的朋友,也祝愿大家顺利拿到自己想要的offer,这份资料主要包含了Java基础,数据结构,jvm,多线程等等,由于篇幅有限,以下只展示小部分面试题,有需要完整版的朋友可以点一点领取:戳这里即可领取下面资料,获取码:优快云在这里插入图片描述

1. 自定义JDK动态代理之投鞭断流实现自动映射器Mapper

首先定义一个pojo。

public class User {
   
 private Integer id;
 private String name;
 private int age;

 public User(Integer id, String name, int age) {
   
  this.id = id;
  this.name = name;
  this.age = age;
 }
 // getter setter
}
再定义一个接口UserMapper.java。

public interface UserMapper {
   
 public User getUserById(Integer id); 
}

接下来我们看看如何使用动态代理之投鞭断流,实现实例化接口并调用接口方法返回数据的。

自定义一个InvocationHandler。

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

public class MapperProxy implements InvocationHandler {
   

 @SuppressWarnings("unchecked")
 public <T> T newInstance(Class<T> clz) {
   
  return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值