There is no getter for property named ‘*’ in ‘class java.lang.String’,此错误之所以出现,是因为mybatis在对parameterType="String"的sql语句做了限制,假如你使用这样的条件判断时,就会出现该错误.
一、错误再现
<select id="selectByApplyTurnUser" parameterType="java.lang.String" resultType="java.lang.String">
SELECT
su.user_name 'applyTurnUser'
FROM biz_occ_base bob
left join sys_user su on su.user_code = bob.apply_turn_user
<where>
<if test="applyTurnUser!= null">
AND bob.apply_turn_user = #{applyTurnUser,jdbcType=VARCHAR}
</if>
</where>
limit 1
</select>
该sql对应的mapper class中对应的方法为 String selectByApplyTurnUser(String applyTurnUser);也就是说,传递的参数名为applyTurnUser,正常情况下,这样的配置合情合理。那么这个时候,项目运行该查询语句时,就会抛出There is no getter for property named ‘applyTurnUser’ in 'class java.lang.String’错误!
二、解决办法
当然了,如果你没有时间来看源码分析实例的话,我想先告诉你解决办法,免得你被问题困扰。解决办法很简单,你只需要把 修改为 就好了,还有一种情况就是在sql对应的mapper class中对应的方法为 String selectByApplyTurnUser(@Param(“applyTurnUser”)String applyTurnUser);其他地方不需要改动(也就是说and username = #{username}不需要改动为and username = #{_parameter}),修改后的sql语句如下:
<select id="selectByApplyTurnUser" parameterType="java.lang.String" resultType="java.lang.String">
SELECT
su.user_name 'applyTurnUser'
FROM biz_occ_base bob
left join sys_user su on su.user_code = bob.apply_turn_user
<where>
<if test="_parameter != null">
AND bob.apply_turn_user = #{applyTurnUser,jdbcType=VARCHAR}
</if>
</where>
limit 1
</select>