问题
最近有一个需求,需要前端告诉后端按照某个字段进行排序。这里主要侧重mybatis的xml实现,其他Spring集成就忽略了。
mapper xml实现
<if test="sortField != null and sortField != ''">
ORDER BY
<choose>
<when test="sortField == 'perCapitaEffectivePoints'">
per_capita_effective_points ${sortOrder}
</when>
<when test="sortField == 'perCapitaCumulativePoints'">
per_capita_cumulative_points ${sortOrder}
</when>
<otherwise>
dept_name
</otherwise>
</choose>
</if>
注意,这里使用的是$
而不是使用#
,如果使用#
语法mybatis拼接出来Order by子句不符合sql语法。只能使用$
语法引用变量。这里还需要在java代码里面做一些防注入处理。类似如下:
String validatedSortOrder = "DESC".equalsIgnoreCase(sortOrder) ? "DESC" : "ASC";
后面使用validatedSortOrder变量的数据传给mybatis就可以了。