فهرست منبع

fix: rank 更新改用 XML 手写 SQL 避免 MySQL 保留字转义问题

rank 是 MySQL 保留字(窗口函数)。MyBatis-Plus 的 updateById
通过 @TableField("`rank`") 生成的 UPDATE SET rank=? 可能在
MySQL 8 中静默失败。
改为 MenuMapper.xml 手写 UPDATE t_menu SET `rank`=? WHERE id=?
确保反引号正确转义。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 1 هفته پیش
والد
کامیت
182e43c935

+ 5 - 0
haha-mapper/src/main/java/com/haha/mapper/MenuMapper.java

@@ -19,6 +19,11 @@ public interface MenuMapper extends BaseMapper<Menu> {
     @Select("SELECT menu_id FROM t_role_menu WHERE role_id = #{roleId}")
     List<Long> selectMenuIdsByRoleId(@Param("roleId") Long roleId);
 
+    /**
+     * 更新菜单排序 (rank 是 MySQL 保留字,用 XML 手写 SQL 处理反引号转义)
+     */
+    int updateRank(@Param("id") Long id, @Param("rank") Integer rank);
+
     /**
      * 根据角色ID列表查询该角色拥有的菜单
      */

+ 5 - 0
haha-mapper/src/main/resources/mapper/MenuMapper.xml

@@ -30,6 +30,11 @@
         <result column="deleted" property="deleted"/>
     </resultMap>
 
+    <!-- 更新菜单排序 (rank 是 MySQL 保留字,必须用反引号) -->
+    <update id="updateRank">
+        UPDATE t_menu SET `rank` = #{rank}, update_time = NOW() WHERE id = #{id}
+    </update>
+
     <!-- 根据角色ID列表查询菜单 -->
     <select id="selectMenusByRoleIds" resultMap="MenuResultMap">
         SELECT DISTINCT m.* FROM t_menu m

+ 1 - 5
haha-service/src/main/java/com/haha/service/impl/MenuServiceImpl.java

@@ -189,11 +189,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
         }
         for (Menu menu : menus) {
             if (menu.getId() != null && menu.getRank() != null) {
-                Menu update = new Menu();
-                update.setId(menu.getId());
-                update.setRank(menu.getRank());
-                update.setUpdateTime(LocalDateTime.now());
-                updateById(update);
+                baseMapper.updateRank(menu.getId(), menu.getRank());
             }
         }
         log.info("批量更新菜单排序成功: {}条", menus.size());