事情是这样的,刚才在做一个bigint型数据的排序时,发现排序之后的结果总是按照ascii码来进行的排序,那么显然这样是不合适的。
然后我就从网上找了找,说是修改${sort}为${sort}+0就正常按照数字排序了,如下:
<choose>
<when test="sort != null and sort.trim() != ''">
order by ${sort}+0 ${order}
</when>
<otherwise>
order by `problem_id` asc
</otherwise>
</choose>
确实,这样是可以解决这个问题的,但是这样做,有个很明显的问题就是严重影响查询的性能,因为要给每条记录都要有个加0操作。而且这种一般是针对于字符串排序时,我们不想根据ascii码排时才这样操作。。
那么到底该怎么解决这个问题呢?
然后我就走了一遍这个流程,从我前端将bootstarp_table里面给problemId字段设置为了sortable,,然后一直传到mybatis,我发现这时候mybatis不知道是怎么处理的problemId字段的,我没有深入研究这个(有过研究的同学可以告知我一下),反正最后的结果就是按照了数据库中problem_id字段的ascii码进行了排序。。
想到这里,我猜测是不是因为我给mybatis传的是problemId而不是problem_id,导致的这个问题呢?
然后我在service层做了如下处理
String sortField = (String) query.get("sort");//query为我封装的一个map对象
if(sortField!=null){
if(sortField.matches("(.*?)(Id)")){
query.replace("sort",sortField.split("Id")[0]+"_id");
}
}
然后,问题完美解决了!!!
总结:使用mybatis对于数值型数据进行排序时,我们要
注意排序的字段名称尽量和数据库中的字段名一致!