MyBatis根据传入字段排序

  • 1. 需求描述
  • 2. 解决方案
    • 2.1 解决思路
    • 2.2 实现方式

1. 需求描述

分页列表查询,为了提高可扩展性,支持不同字段排序查询,所以根据传入字段及排序方式查询。

2. 解决方案

2.1 解决思路

方式是mybatis的mapper文件中sql拼接即可。
mybatis排序时使用order by 动态参数时需要注意,用$而不是#
#{} ,会对自动传入的数据加一个双引号,导致排序失败,如 order by #{age},解析结果 order by "age"
${},不会对传入值添加引号,但是可能会发生SQL注入,如 order by ${age},解析结果 order by age

注意:
虽然解决了灵活性扩展性,但是引入了sql注入的风险,具体情况还是要根据公司合规要求及业务场景斟酌使用。

2.2 实现方式

sortField:是传入字段
positiveOrReverse:升序还是降序(desc 降序,asc 升序)

    <sql id="pageQueryOrder">
        <choose>
            <when test="sortField != null and sortField != ''">
                order by ${sortField}
                <if test="positiveOrReverse != null and positiveOrReverse != ''">
                    ${positiveOrReverse}
                </if>
                limit #{offset}, #{pageSize}
            </when>
            <otherwise>
                order by create_time desc limit #{offset}, #{pageSize}
            </otherwise>
        </choose>
    </sql>

更多推荐

MyBatis根据传入字段排序