Mybatis使用中遇到的错误

Mybatis报错

错误1
### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
  • mapper.xml文件
  <select id="findCameraInfoPage" resultMap="modelCameraInfoMap">
    select <include refid="pageQueryReturnColumn"/> from <include refid="tableName"/>
    <include refid="pageQueryWhere"/>
    <!--多条件排序-->
        <if test="sort != null and sort !=''">
          order by
          <foreach collection="sort" index="index" item="column" separator=",">
                 #{column }
          </foreach>
        </if>
    limit #{pageSize} offset #{start}
  </select>

这里我的sort是一个list集合,在动态sql语句中如果出现了list!=‘ ’这样的判断,就会把传进来的list当做string处理,因此在循环中就会出错;把list!=‘’去掉即可或者写成 list.size > 0

  <select id="findCameraInfoPage" resultMap="modelCameraInfoMap">
    select <include refid="pageQueryReturnColumn"/> from <include refid="tableName"/>
    <include refid="pageQueryWhere"/>
    <!--多条件排序-->
        <if test="sort != null and sort.size>0">
          order by
          <foreach collection="sort" index="index" item="column" separator=",">
                 #{column }
          </foreach>
        </if>
    limit #{pageSize} offset #{start}
  </select>
错误2
  • 传入数据
"sort": [{"name":"resourceId","order":"desc"},{"name":"longitude","order":"asc"}]
Type handler was null on parameter mapping for property '__frch_
  • mapper.xml文件
<foreach collection="sort" index="index" item="column" separator=",">
                 #{column }
          </foreach>

应该写成#{column.name }否则出现上面的错误,因为sort是一个list集合里面有多个属性。、

错误3
字符串替换 
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。
这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。
比如,像ORDER BY,你可以这样来使用: 
ORDER BY ${columnName} 
这里MyBatis不会修改或转义字符串。 
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,
因此你不应该允许用户输入这些字段,或者通常自行转义并检查。 



1.MyBatis排序 针对单字段排序 
1.1 MyBatis排序时,ORDER BY 后的参数应该形如:ORDER BY ${sname} ${sord} 
    sname : 排序字段 
     sord : 排序顺序 (ASC,DESC1.2 MyBatis排序时,ORDER BY 后的参数如果形如:ORDER BY #{sname} #{sord} 
    sname : 排序字段 
     sord : 排序顺序 (ASC,DESC) 
     则不能返回想当然正确的结果。

猜你喜欢

转载自blog.csdn.net/yu0_zhang0/article/details/81360709
今日推荐