There is no getter for property named '*' in 'class java.lang.String'
,此錯誤之因此出現,是由於mybatis在對parameterType="String"
的sql語句作了限制,假如你使用<when test="username != null">
這樣的條件判斷時,就會出現該錯誤,不過今天咱們來刨根問底一下。java
想要追本溯源,就須要錯誤再現,那麼假設咱們有這樣一個sql查詢:sql
<select id="getRiskMember" resultMap="BaseResultMap" parameterType="String"> <include refid="selectMember"/> <choose> <when test="username != null"> and username = #{username} </when> <otherwise> and safetylevel > 1 </otherwise> </choose> </select>
parameterType="String"
,這一點是必須得,參數類型必須是string。List<Member> getRiskMember(String username);
,也就是說,傳遞的參數名爲username,正常狀況下,這樣的配置合情合理。<when test="username != null">
,你有一個對應的test判斷語句,也多是if。There is no getter for property named 'username' in 'class java.lang.String'
錯誤!固然了,若是你沒有時間來看源碼分析實例的話,我想先告訴你解決辦法,省得你被問題困擾。解決辦法很簡單,你只須要把 <when test="username != null">
修改成 <when test="_parameter!= null">
就行了,其餘地方不須要改動(也就是說and username = #{username}
不須要改動爲and username = #{_parameter}
),修改後的sql語句以下:mybatis
<select id="getRiskMember" resultMap="BaseResultMap" parameterType="String"> <include refid="selectMember"/> <choose> <when test="_parameter != null"> and username = #{username} </when> <otherwise> and safetylevel > 1 </otherwise> </choose> </select>