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,DESC)
1.2 MyBatis排序时,ORDER BY 后的参数如果形如:ORDER BY #{sname} #{sord}
sname : 排序字段
sord : 排序顺序 (ASC,DESC)
则不能返回想当然正确的结果。