在Mapper文件中,方法参数为两个名字不同的 Long 类型的参数。
// 自定义接口
Long findIdByTypeIdAndDetailId(Long typeId, Long detailId);
对应的xml文件为:
<select id="findIdByTypeIdAndDetailId" parameterType="java.lang.Long" resultType="java.lang.Long">
select distinct d.id as id
from tab_case c, tab_case_type t, tab_case_detail d
where c.type_id = t.id and t.id = #{typeId} and c.detail_id = d.id and d.id = #{detailId}
</select>
调用该接口时,报错。
网上查了半天,得到两种解决方法。至于具体什么原因,我也没怎么搞懂🤣
方法一:
将mapper文件中的参数添加 @Param 注解。采用注解的方式传递。
xml文件通过名字来获取参数(即 @Param() 中的字符串)
// 自定义接口
Long findIdByTypeIdAndDetailId(@Param("typeId") Long typeId, @Param("detailId") Long detailId);
<select id="findIdByTypeIdAndDetailId" parameterType="java.lang.Long" resultType="java.lang.Long">
select distinct d.id as id
from tab_case c, tab_case_type t, tab_case_detail d
where c.type_id = t.id and t.id = #{typeId} and c.detail_id = d.id and d.id = #{detailId}
</select>
方法二:
mapper文件不变。
xml文件通过索引的方式来获取参数。
#{param1} , #{param2} 或者 #{arg0} ,#{arg1}
<select id="findIdByTypeIdAndDetailId" parameterType="java.lang.Long" resultType="java.lang.Long">
select distinct d.id as id
from tab_case c, tab_case_type t, tab_case_detail d
where c.type_id = t.id and t.id = #{param1} and c.detail_id = d.id and d.id = #{param2}
</select>
PS:发博客,仅仅是当作学习的笔记~