mybatis面试--Mapper内的方法能重载(overLoad)吗?

本文探讨了在MyBatis中Mapper接口内的方法是否可以重载的问题。通过验证和查看源码,得出结论:MyBatis是通过方法名来查找对应SQL,与参数无关,因此在Mapper接口中重载方法会导致MyBatis无法正确匹配,故不支持方法重载。

问题

Mapper内的方法能重载(overLoad)吗?

验证

1. UserMapper 写两个queryUserByCondition方法

@Mapper
@Repository
public interface UserMapper {
    baseuser queryUserByCondition(User user);
    baseuser queryUserByCondition(Integer id);
}

2. UserMapper.xml写两个select

<select id="queryUserByCondition" parameterType="com.jarvis.msgserver.dto.User" resultType="com.jarvis.msgserver.pojo.baseuser">
    select Id,UserName,RealName,Code,UserPassword,ModifiedOn from baseuser
    <where>
        <if test="Id!=0">
            Id=#{Id}
        </if>
        <if test="username!=null">
            and UserName=#{username}
        </if>
        <if test="password!=null">
            and UserPassword=#{password}
        </if>
    </where>
</select>

<select id="queryUserByCondition" parameterType="java.lang.Integer"  resultType="com.jarvis.msgserver.pojo.baseuser">
    select Id,UserName,RealName,Code,UserPassword,ModifiedOn from baseuser where Id=#{id}
</select>

3. 测试:

Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.jarvis.msgserver.dao.UserMapper.queryUserByCondition. please check file [E:\JavaStudyProject\msgserver\target\classes\mybatis\dao\UserMapper.xml] and file [E:\JavaStudyProject\msgserver\target\classes\mybatis\dao\UserMapper.xml]
	at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:1014)
	at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:970)
	at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:768)
	at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:297)
	at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:113)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:138)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:131)
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:121)
	... 73 common frames omitted

4. 找源码

参考:https://blog.youkuaiyun.com/unix21/article/details/52239514

结论

mybatis查找mapper内的方法是靠方法名,和参数无关。
所以,对于mapper接口,Mybatis禁止方法重载

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值