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>
博客主要讲述MyBatis在parameterType为String的SQL语句中出现的错误,即There is no getter for property named ‘*’ in ‘class java.lang.String’。通过具体示例展示错误再现,同时给出两种解决办法,一是修改SQL语句,二是在mapper class方法中使用@Param注解。
6405

被折叠的 条评论
为什么被折叠?



