问题分析
在开发过程中会遇到“There is no getter for property named ‘*’ in 'class java.lang.String”的报错情况。这种情况主要是因为mybatis对“parameterType='String’"的sql语句做了限制,如果你使用了该语句,当用这样的条件判断时,就会出现该错误,如下代码所示。
select distinct * from (
select *
from
icms_group
where 1 = 1
<if test="group_id != null">
and group_id = #{group_id}
</if>
<if test="group_name != null">
and group_name like CONCAT('%',#{group_name},'%')
</if>
union all
select *
from
icms_group
where group_id in
(
select parent_id
from
icms_group
where 1 = 1
<if test="group_id != null">
and group_id = #{group_id}
</if>
<if test="group_name != null">
and group_name like CONCAT('%',#{group_name},'%')
</if>
)
union all
select *
from
icms_group
where parent_id in
(
select group_id
from
icms_group
where 1 = 1
<if test="group_id != null">
and group_id = #{group_id}
</if>
<if test="group_name != null">
and group_name like CONCAT('%',#{group_name},'%')
</if>
)
) as t
处理方法
将**改为**即可,改正后的结果如下代码所示。
select distinct * from (
select *
from
icms_group
where 1 = 1
**<if test="_parameter != null">**
and group_id = #{group_id}
</if>
**<if test="_parameter != null">**
and group_name like CONCAT('%',#{group_name},'%')
</if>
union all
select *
from
icms_group
where group_id in
(
select parent_id
from
icms_group
where 1 = 1
**<if test="_parameter != null">**
and group_id = #{group_id}
</if>
**<if test="_parameter != null">**
and group_name like CONCAT('%',#{group_name},'%')
</if>
)
union all
select *
from
icms_group
where parent_id in
(
select group_id
from
icms_group
where 1 = 1
**<if test="_parameter != null">**
and group_id = #{group_id}
</if>
**<if test="_parameter != null">**
and group_name like CONCAT('%',#{group_name},'%')
</if>
)
) as t
注意其他的地方不要改动,parameterType等也要保留。