今天遇到的报错
There is no getter for property named 'departId' in 'class java.lang.Integer'
代码重现如下: mapper接口:
1
2
3
4
5
6
7
8
public interface DistributeMapper {
List<DistributePO> queryOtherDistribute(Integer departId);
List<DistributePO> queryDepartDistribut(Integer departId);
List<DistributePO> queryWorkNum(Integer departId);
}
一糊涂将int写成了integer mapper的SQL语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<select id="queryWorkNum" resultMap="BaseResultMap">
with RECURSIVE dept as (
select d.id as super_id,d.department_name as super_name,d.id as sub_id,cast(d.department_name as varchar(100))
as name,d.department_name,1 as dept_rank
from hello_pivot.t_department_info d
-- where d.data_status=1 and department_parent_id=0 -- 全部
where d.data_status=1
<choose>
<when test="departId!= -1">
and id=#{departId} -- 某个部门
</when>
<otherwise>
and department_parent_id = 0
</otherwise>
</choose>
...
...
</select>
“Integer departId” 加上 when test=”departId!= -1” 导致了报错。 原因是: 在mybatis中,采用ONGL解析参数,所以会自动采用对象树的形式获取传入的变量值。这里传入参数的类型为 integer 获取departId参数的值时,其实获取的就是Integer的departId属性值。所以这样的写法是不对的。 解决办法:参数前面加@Parm(“departId”) 注解
1
2
3
public interface DistributeMapper {
List<DistributePO> queryXX(@Param("departId")Integer departId);
}
或者
1
2
3
<if test="_parameter != null">
and id = #{departId}
</if>