使用mybatis对于数值型数据进行排序时请务必注意字段名称!!!

事情是这样的,刚才在做一个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对于数值型数据进行排序时,我们要
注意排序的字段名称尽量和数据库中的字段名一致!

猜你喜欢

转载自blog.csdn.net/qq_44713855/article/details/113470626
今日推荐