mybatis模糊查询的注意点

org.apache.ibatis.exceptions.PersistenceException: 
### 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的项目名!!!

猜你喜欢

转载自blog.csdn.net/l_p1992/article/details/79838423