### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userName' in 'class java.lang.String'
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userName' in 'class java.lang.String'
在我用用户名查询的时候mapper里的sql句写的不对,导致以上的错误产生。
错误的写法:${}不能写任意名称!
<select id="findUserByName" parameterType="String" resultType="cn.com.mybatis.pojo.User">
SELECT * FROM USERINFO WHERE userName like '%${userName}%'
</select>
正确的写法:这里不能写userName而是写value的原因不是很懂,大神求教学!!!
【追记原因】→#是占位符,$是拼接符号,当接受简单类型的时候“#{}”只能写“value”而不能写别的任意名称!
<select id="findUserByName" parameterType="String" resultType="cn.com.mybatis.pojo.User">
SELECT * FROM USERINFO WHERE userName like '%${value}%'</select>
============================《追记》=======================
但是$并不能有效的防止sql的注入,下面的是用CONCAT的拼接写法,能使用#就不要使用$!!!
<select id="findUserByName" parameterType="String" resultType="cn.com.mybatis.pojo.User">
SELECT * FROM USERINFO WHERE userName like CONCAT('%',#{userName},'%')
</select>
看了网上的各种方法,还有bind标签也不错,没有试就不在这里贴出代码了,有兴趣的话百度去。
=========================================================
差别在于接受参数的设置,还是惯性思维导致的。
原因的懒惰!!!copy的单条的sql句,顺手将接受参数设成了DB的项目名!!!