ibatis中要增加一个排序功能

按照惯性思维增加了这样的代码

<isNotNull prepend="," property="orderColumn">
    order by #orderColumn#
</isNotNull>

运行起来不符合预期

检查了生成了原始语句,发现组装成的SQL变成了 

order by 'name'

在orderColumn参数前后加上了引号,所以会不成功

最终解决方法如下

<isNotNull prepend="," property="orderColumn">
    order by $orderColumn$
</isNotNull>

然后显式的在DO中对orderColumn属性值进行筛选,避免引入注入漏洞,即

public void setOrderColumn(String orderColumn){
    if("id".equals("orderColumn") || ...){
        this.orderColumn = orderBy;
    }else{
        this.orderColumn = null;
    }
}

图片描述


小朋友
395 声望11 粉丝

引用和评论

0 条评论