问题:在公司写查询时候,在写人员权限查询时候,部门性质表是一张层层嵌套迭代的表(部门id,父部门id,部门级别),需求场景需要找到部门所有下级部门,按权限查询数据。正常思路:
查询当前所在部门 编码 级别 循环迭代下级部门 拿下级部门编码 父编码 级别 继续循环
mapper层入参:
ListqueryUser(@Param("deptCode") List > deptCode);
and b.OBJ_MRC in #{item}
SQL in集合长度大于1000会报错(解决方法把一个集合拆分为多个小于集合)
切分in集合两种方法public static List改进> splitList(List
list, int len) { //list为需要拆分的集合 len 拆分的长度 if (list == null || list.size() == 0 || len < 1) { return null; } List > result = new ArrayList
>(); int size = list.size(); int count = (size + len - 1) / len; for (int i = 0; i < count; i++) { List
subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1))); result.add(subList); } return result; } public Map groupList(List list) { int listSize = list.size(); int toIndex = 1000; Map map = new HashMap(); //用map存起来新的分组后数据 int keyToken = 0; for (int i = 0; i < list.size(); i += 1000) { if (i + 1000 > listSize) { //作用为toIndex最后没有100条数据则剩余几条newList中就装几条 toIndex = listSize - i; } List newList = list.subList(i, i + toIndex); map.put("keyName" + keyToken, newList); keyToken++; } return map; }
当in集合 集合长度特别长的时候 sql查询效率会非常低下,数据量特别大的时候不建议使用这种方式。
改进方式新增部门横向拉伸表 把纵向循环迭代的部门表 水平横向拉伸 权限查询时使用连表查询的方式提高SQL查询效率
1.定时任务,从原表拉数据定时更新部门横向拉伸表
2.从BI大数据部门数据平台导数



