Mybatis框架的mapper接口中的方法名可以重载吗

关于mybatis框架的mapper接口中的方法名是否可以重载

答案是不可以重载

为什么是不可以重载?

这个就要从Mybatis框架中mapper接口的工作原理说起

Mybatis中mapper接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为mapper接口生成对应的代理对象,代理对象会拦截接口方法,然后根据全路径名+方法名的策略将这个字符串保存。例如一个mapper接口的全路径为:com.dao.TestMapper,方法名:findById,全路径名+方法名:com.dao.TestMapper.findById;

Mybatis中mapper.xml映射文件中的select、insert、update、delete标签会被解析成一个个MapperStatement对象,对象名称就是mapper.xml文件中的namespace的值+标签中的id的值。例如一个mapper.xml映射文件中的namesapce的值为:com.dao.TestMapper,标签<select id="findById">;那这个标签的MapperStatement对象名称就是:com.dao.TestMapper.findById;

动态代理对象根据保存的接口全路径名+方法名的字符串反射调用到对应的MapperStatement对象,并执行其sql,并将执行结果返回。

简单来说就是接口全路径+接口方法名与映射文件中namespace值+标签的id值是一一对应。mapper.xml映射文件标签的id是不能出现重复的,即id值唯一,如果接口中的方法出现重载,那么就会导致传入的参数与匹配的标签sql中的参数不一致,致使执行sql时报错。

 

posted @ 2023-03-07 11:38  一只小手  阅读(949)  评论(0编辑  收藏  举报