看了网上的很多文章,说mapper接口里不能写重载方法,感觉这种说法不对,mapper接口是可以实现重载方法的.
实现方法
例如:package mapper;
import pojo.User;
import java.util.List;
public interface UserMapper {
List<User> findUsers();
List<User> findUsers(int id);
}
然后在UserMapper.xml中利用Mybatis的动态sql就可以实现.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper">
<select id="findUsers" resultType="user">
select * from user
<where>
<if test="id != null">
id = #{id}
</if>
</where>
</select>
</mapper>
这样就实现了在mapper中写重载方法
认为不能重载的原因
有很多人认为不能重载的原因在于:
在映射文件中同一个namespace下写了多个相同的id对应mapper接口中的重载方法,但是由于mybatis查找sql是通过namespace+id的方式,所以出现了不唯一性,导致出错.故而认为mybatis的mapper中不可以写重载方法,这种说法我认为是错误的.