<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.backendsys.modules.system.dao.SysDictionaryDao">

    <!--
        CASE WHEN id < 0 THEN 1 ELSE 0 END 这个表达式将 id 列根据正负性映射为 1 或 0，负数会被映射为 1。
        ABS(id) 计算出 id 列的绝对值，以便在相同正负性（即排序键为 0 或 1）的记录中使用。
        由于先按 sign 排序，再按 abs_id 排序，所以负数会被排在正数后面。
    -->
    <select id="selectDictionaryList" resultType="com.backendsys.modules.system.entity.SysDictionary">
        SELECT id, category_value, key_value, key_translation, key_translation_en,
            CASE WHEN key_value &lt; 0 THEN 1 ELSE 0 END AS sign,
            ABS(key_value) AS abs_key_value
        FROM sys_dictionary
        ORDER BY sign, abs_key_value, id;
    </select>

</mapper>