ソースを参照

修复用户列表分页问题(多角色)

tsurumure 3 ヶ月 前
コミット
9cab407d2e

+ 52 - 0
src/main/java/com/backendsys/config/Mybatis/handler/StringToListTypeHandler.java

@@ -0,0 +1,52 @@
+package com.backendsys.config.Mybatis.handler;
+
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class StringToListTypeHandler extends BaseTypeHandler<List<Long>> {
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, List<Long> parameter, JdbcType jdbcType) throws SQLException {
+        throw new UnsupportedOperationException("Not implemented yet.");
+    }
+
+    @Override
+    public List<Long> getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        String roleIds = rs.getString(columnName);
+        return parseRoleIds(roleIds);
+    }
+
+    @Override
+    public List<Long> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        String roleIds = rs.getString(columnIndex);
+        return parseRoleIds(roleIds);
+    }
+
+    @Override
+    public List<Long> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        String roleIds = cs.getString(columnIndex);
+        return parseRoleIds(roleIds);
+    }
+
+    private List<Long> parseRoleIds(String roleIds) {
+        if (roleIds == null || roleIds.isEmpty()) {
+            return new ArrayList<>();
+        }
+        String[] parts = roleIds.split(",");
+        List<Long> result = new ArrayList<>();
+        for (String part : parts) {
+            try {
+                result.add(Long.parseLong(part.trim()));
+            } catch (NumberFormatException e) {
+                // Ignore invalid numbers
+            }
+        }
+        return result;
+    }
+}

+ 4 - 4
src/main/resources/mapper/system/SysUserInfoDao.xml

@@ -49,15 +49,14 @@
         <result property="create_time" column="create_time" />
         <result property="update_time" column="update_time" />
         <result property="del_flag" column="del_flag" javaType="java.lang.Integer" />
-        <collection property="role_ids" javaType="java.util.List" ofType="java.lang.Long" column="role_id">
-            <id property="role_id" column="role_id" />
-        </collection>
+        <result property="role_ids" column="role_ids" javaType="java.util.List" jdbcType="VARCHAR"
+            typeHandler="com.backendsys.config.Mybatis.handler.StringToListTypeHandler" />
     </resultMap>
 
     <select id="selectUserList" resultMap="resultMapUserList">
         SELECT
             <include refid="includeUser" />,
-            urr.role_id role_id,
+            GROUP_CONCAT(DISTINCT urr.role_id) AS role_ids,
             COALESCE(ui.integral, 0) integral
         FROM sys_user_info uf
         LEFT JOIN sys_user u ON u.id = uf.user_id
@@ -78,6 +77,7 @@
             </if>
             <if test="is_super != null and is_super != ''">AND uf.is_super = #{is_super}</if>
         </where>
+        GROUP BY uf.id
         ORDER BY uf.create_time DESC
     </select>