Kaynağa Gözat

去掉所有使用mysql的Limit的特殊关键字进行分页

lijie 3 yıl önce
ebeveyn
işleme
f7b202da5e

+ 5 - 7
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectDigitalMapper.java

@@ -21,14 +21,12 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
     /***
      * Description: 根据项目id查询对象列表
      * @param requestData : 请求参数
-     * @param skip
-     * @param size
      * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
      * @author : lijie
      * @date :2021/8/24 16:40
      * Update By lijie 2021/8/24 16:40
      */
-    List<List<ObjectDigital>> queryObjectDigitalsByProjectId(@Param("param") RequestData requestData, @Param("skip") Long skip, @Param("size") Long size);
+    Page<ObjectDigital> queryObjectDigitalsByProjectId(Page<ObjectDigital> page,@Param("param") RequestData requestData);
     /***
      * Description: 根据上级id查询对象列表
      * @param requestData : 请求参数
@@ -37,7 +35,7 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * @date :2021/8/25 9:49
      * Update By lijie 2021/8/25 9:49
      */
-    List<List<ObjectDigital>> queryObjectListBySuperiorId(@Param("param") RequestData requestData);
+    Page<ObjectDigital> queryObjectListBySuperiorId(Page<ObjectDigital> page, @Param("param") RequestData requestData);
     /***
      * Description: 查询指定楼层下所有指定空间类型的空间
      * @param requestData : 请求参数
@@ -46,7 +44,7 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * @date :2021/8/30 10:26
      * Update By lijie 2021/8/30 10:26
      */
-    List<List<ObjectDigital>> queryObjectListByFloorIdAndRoomFuncType(@Param("param") RequestData requestData);
+    Page<ObjectDigital> queryObjectListByFloorIdAndRoomFuncType(Page<ObjectDigital> page,@Param("param") RequestData requestData);
     /***
      * Description:查询指定空间下所有指定对象类型的设备
      * @param requestData : 请求参数
@@ -64,7 +62,7 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * @date :2021/8/30 17:44
      * Update By lijie 2021/8/30 17:44
      */
-    List<List<ObjectDigital>> queryEquipListByClassCode(@Param("param") RequestData requestData);
+    Page<ObjectDigital> queryEquipListByClassCode(Page<ObjectDigital> page,@Param("param") RequestData requestData);
     /***
      * Description: 根据id,localId,name,localName,CADID及关系类型信息,对象分类信息创建关系
      * @param requestData : 请求参数
@@ -82,7 +80,7 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * @date :2021/8/30 9:41
      * Update By lijie 2021/8/30 9:41
      */
-    List<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(@Param("param") RequestData requestData);
+    Page<ObjectDigital> queryObjectListByGraphCodeAndRelCode(Page<ObjectDigital> page,@Param("param") RequestData requestData);
     /***
      * Description: 查询去向数据
      * @param toIds : 去向id数组

+ 24 - 57
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -198,8 +198,6 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      */
     @Override
     public CommonResult<List<ObjectDigital>> queryObjectListSuperiorId(RequestData requestData){
-        // 1.计算分页参数
-        DigitalCommonUtils.computePageParam(requestData);
         // 2.当只有项目id时不查询关系,直接根据项目id筛选所有对象
         if (StrUtil.isBlank(requestData.getBuildingId())
                 && StrUtil.isBlank(requestData.getFloorId())
@@ -210,7 +208,9 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
         // 3.1 获取关系code列表
         fillSubordinateRelCode(requestData);
         // 3.2 调用查询语句查询相关内容
-        return analysisQueryResultList(objectDigitalMapper.queryObjectListBySuperiorId(requestData),requestData,false,true);
+        return analysisQueryResultList(objectDigitalMapper
+                .queryObjectListBySuperiorId(DigitalCommonUtils
+                        .computePageObject(requestData),requestData),requestData,false,true);
     }
     /***
      * Description: 查询指定楼层下所有指定空间类型的空间
@@ -222,13 +222,12 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      */
     @Override
     public CommonResult<List<ObjectDigital>> querySpaceListByFloorIdAndRoomFuncType(RequestData requestData) {
-        // 1.计算分页参数
-        DigitalCommonUtils.computePageParam(requestData);
         // 2.使用Fl2Sp关系查询楼层下的空间
         requestData.setRelCode(DigitalRelCode.FL_2_SP.getIndex());
         requestData.setObjType(DigitalObjectType.SPACE.getIndex());
         requestData.setRelId(requestData.getFloorId());
-        List<List<ObjectDigital>> dataResult = objectDigitalMapper.queryObjectListByFloorIdAndRoomFuncType(requestData);
+        Page<ObjectDigital> dataResult = objectDigitalMapper
+                .queryObjectListByFloorIdAndRoomFuncType(DigitalCommonUtils.computePageObject(requestData),requestData);
         return commonAnalysisPageResult(dataResult);
     }
     /***
@@ -259,11 +258,10 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      */
     @Override
     public CommonResult<List<ObjectDigital>> queryEquipListByClassCode(RequestData requestData) {
-        // 1.计算分页参数
-        DigitalCommonUtils.computePageParam(requestData);
         // 2.使用Fl2Sp关系查询楼层下的空间
         requestData.setObjType(DigitalObjectType.EQUIPMENT.getIndex());
-        List<List<ObjectDigital>> dataResult = objectDigitalMapper.queryEquipListByClassCode(requestData);
+        Page<ObjectDigital> dataResult = objectDigitalMapper
+                .queryEquipListByClassCode(DigitalCommonUtils.computePageObject(requestData),requestData);
         return commonAnalysisPageResult(dataResult);
     }
     /***
@@ -295,8 +293,6 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      */
     @Override
     public CommonResult<List<ObjectDigital>> querySpaceListByRoomFuncType(RequestData requestData) {
-        // 1.计算分页参数
-        DigitalCommonUtils.computePageParam(requestData);
         // 2.根据空间功能类型查询其下级空间功能类型
         List<CodeTableData> codeTableDatas = CodeTableDataFacade
                 .queryCodeTableDatasByParentCode(AppContext.getContext().getGroupCode(),
@@ -336,9 +332,8 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      */
     @Override
     public CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(RequestData requestData) {
-        // 1.计算分页参数
-        DigitalCommonUtils.computePageParam(requestData);
-        List<List<ObjectDigital>> objList = objectDigitalMapper.queryObjectListByGraphCodeAndRelCode(requestData);
+        Page<ObjectDigital> objList = objectDigitalMapper
+                .queryObjectListByGraphCodeAndRelCode(DigitalCommonUtils.computePageObject(requestData),requestData);
         return analysisQueryResultList(objList,requestData,false,false);
     }
     /***
@@ -409,38 +404,14 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      * @date :2021/8/30 14:15
      * Update By lijie 2021/8/30 14:15
      */
-    private CommonResult<List<ObjectDigital>> commonAnalysisPageResult(List<List<ObjectDigital>> dataResult) {
-        if (CollUtil.isEmpty(dataResult) || dataResult.size()<2){
-            return ResultHelper.multi(new ArrayList<>(),0L);
-        }
-        List<ObjectDigital> objectDigitals = dataResult.get(0);
-        if (CollUtil.isEmpty(objectDigitals)){
+    private CommonResult<List<ObjectDigital>> commonAnalysisPageResult(Page<ObjectDigital> dataResult) {
+        List<ObjectDigital> records = dataResult.getRecords();
+        if (CollUtil.isEmpty(records)){
             return ResultHelper.multi(new ArrayList<>(),0L);
         }
-        ObjectDigital pageParam = dataResult.get(1).get(0);
-        return ResultHelper.multi(objectDigitals,pageParam.getTotalCount());
+        return ResultHelper.multi(records,dataResult.getTotal());
     }
 
-//    /***
-//     * Description: 计算分页参数
-//     * @param requestData : 请求参数
-//     * @return : void
-//     * @author : lijie
-//     * @date :2021/8/30 10:01
-//     * Update By lijie 2021/8/30 10:01
-//     */
-//    private void computePageParam(RequestData requestData) {
-//        if (null==requestData.getPage()){
-//            requestData.setPage(1L);
-//        }
-//        // 默认分页条数,防止大量查询
-//        long defaultSize = SpringHelper.getLong(CommonConstant.QUERY_PAGE_SIZE_KEY, CommonConstant.QUERY_DEFAULT_PAGE_SIZE);
-//        if (null==requestData.getSize() || requestData.getSize()>defaultSize){
-//            requestData.setSize(defaultSize);
-//        }
-//        requestData.setSkip((requestData.getPage()-1)*requestData.getSize());
-//    }
-
     /***
      * Description: 根据对象id获取下级关系code数组
      * @param requestData : 请求参数
@@ -488,41 +459,37 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      */
     private CommonResult<List<ObjectDigital>> queryObjectListByProjectId(RequestData requestData) {
         // 1.查询结果集
-        List<List<ObjectDigital>> resultList =
-                objectDigitalMapper.queryObjectDigitalsByProjectId(requestData,requestData.getSkip(),requestData.getSize());
+        Page<ObjectDigital> resultList =
+                objectDigitalMapper.queryObjectDigitalsByProjectId(DigitalCommonUtils.computePageObject(requestData),requestData);
         return analysisQueryResultList(resultList,requestData,true,true);
     }
     /***
      * Description: 解析结果集
-     * @param resultList : 结果集
+     * @param pageResult : 结果集
      * @param requestData : 请求参数
      * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
      * @author : lijie
      * @date :2021/8/25 13:16
      * Update By lijie 2021/8/25 13:16
      */
-    private CommonResult<List<ObjectDigital>> analysisQueryResultList(List<List<ObjectDigital>> resultList,
+    private CommonResult<List<ObjectDigital>> analysisQueryResultList(Page<ObjectDigital> pageResult,
                                                                       RequestData requestData,
                                                                       Boolean fillRelFlag,
                                                                       Boolean fillSpaceFlag) {
-        if (CollUtil.isEmpty(resultList)){
-            return ResultHelper.multi(new ArrayList<>(),0);
-        }
-        List<ObjectDigital> pageResult = resultList.get(0);
-        List<ObjectDigital> totalCount = resultList.get(1);
-        if (CollUtil.isEmpty(pageResult)){
+        List<ObjectDigital> records = pageResult.getRecords();
+        if (CollUtil.isEmpty(records)){
             return ResultHelper.multi(new ArrayList<>(),0);
         }
         if (requestData.isOnlyCount()){
             // 只返回数
-            return ResultHelper.multi(new ArrayList<>(),totalCount.get(0).getTotalCount());
+            return ResultHelper.multi(new ArrayList<>(),pageResult.getTotal());
         }
-        fillRelIds(pageResult,fillRelFlag);
+        fillRelIds(records,fillRelFlag);
         // 2.过滤信息点
-        retainObjInfos(pageResult,requestData.getReturnInfos());
+        retainObjInfos(records,requestData.getReturnInfos());
         // 3.处理Fl2Sp的关系,将对应的空间对象的楼层id扔进去
-        fillFloorIdIntoSpaceObjFromIds(pageResult,fillSpaceFlag);
-        return ResultHelper.multi(pageResult,totalCount.get(0).getTotalCount());
+        fillFloorIdIntoSpaceObjFromIds(records,fillSpaceFlag);
+        return ResultHelper.multi(records,pageResult.getTotal());
     }
 
     /***

+ 3 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/dao/SystemCustomMapper.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.rwd.simple.dao;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dmp.basic.dto.RequestData;
 import org.apache.ibatis.annotations.Param;
 
@@ -14,10 +15,10 @@ public interface SystemCustomMapper {
     /**
      *确定建筑不确定楼层 buildingId is not null
      */
-    List<Map<String,Object>> querySystemNotSureFloor(@Param("param") RequestData requestData);
+    Page<Map<String,Object>> querySystemNotSureFloor(Page<Map<String,Object>> page,@Param("param") RequestData requestData);
 
     /**
      *不确定建筑 buildingId is null
      */
-    List<Map<String,Object>> querySystemNotSureBuilding(@Param("param") RequestData requestData);
+    Page<Map<String,Object>> querySystemNotSureBuilding(Page<Map<String,Object>> page,@Param("param") RequestData requestData);
 }

+ 4 - 4
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/impl/SystemServiceImpl.java

@@ -26,14 +26,14 @@ public class SystemServiceImpl implements ISystemService {
     private SystemCustomMapper mapper;
     @Override
     public List<Map<String, Object>> queryNotSureSystem(RequestData requestData) {
-        // 1.计算分页参数
-        DigitalCommonUtils.computePageParam(requestData);
         // 2.不确定建筑 buildingId is null
         // 3.确定建筑不确定楼层 buildingId is not null
         if(StrUtil.isEmpty(requestData.getBuildingId())){
-            return mapper.querySystemNotSureBuilding(requestData);
+            return mapper.querySystemNotSureBuilding(DigitalCommonUtils
+                    .computePageObject(requestData),requestData).getRecords();
         }else{
-            return mapper.querySystemNotSureFloor(requestData);
+            return mapper.querySystemNotSureFloor(DigitalCommonUtils
+                    .computePageObject(requestData),requestData).getRecords();
         }
     }
 }

+ 14 - 49
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectDigitalMapper.xml

@@ -166,13 +166,9 @@
             ) GROUP BY dto.id)
         </if>
     </sql>
-    <sql id="pageSet">
-        <if test="param.skip!=null and param.skip!=null and param.size!=0">
-            limit #{param.skip},#{param.size}
-        </if>
-    </sql>
+
     <sql id="commonQueryObjectListByParam">
-        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+        SELECT DISTINCT
         dto.*,
         JSON_ARRAYAGG( dtr.obj_from ) AS objFromIds,
         JSON_ARRAYAGG( dtr.obj_to ) AS objToIds
@@ -215,34 +211,18 @@
         </if>
         AND dto.valid = TRUE
     </sql>
-    <sql id="commonQueryObjectListByParamSuffix">
-        GROUP BY
-        dto.id
-        <include refid="pageSet">
-            <property name="param" value="#{param}"/>
-        </include>
-        ;
-        SELECT
-        FOUND_ROWS( ) AS totalCount;
-    </sql>
 
-
-    <select id="queryObjectDigitalsByProjectId" resultMap="BaseResultMap,count">
-        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+    <select id="queryObjectDigitalsByProjectId" resultMap="BaseResultMap">
+        SELECT DISTINCT
             *
         FROM dt_object dto
         WHERE 1=1
          <include refid="commonJoinQueryParam">
              <property name="param" value="#{param}"/>
          </include>
-        <include refid="pageSet">
-            <property name="param" value="#{param}"/>
-        </include>
-        ;
-        SELECT FOUND_ROWS()	AS totalCount;
     </select>
-    <select id="queryObjectListBySuperiorId" resultMap="BaseResultMap,count">
-        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+    <select id="queryObjectListBySuperiorId" resultMap="BaseResultMap">
+        SELECT DISTINCT
         dto.*
         FROM
         (
@@ -250,22 +230,15 @@
             <property name="param" value="#{param}"/>
         </include>
         ) AS dto
-        <include refid="pageSet">
-            <property name="param" value="#{param}"/>
-        </include>
-        ;
-        SELECT FOUND_ROWS()	AS totalCount;
     </select>
-    <select id="queryObjectListByFloorIdAndRoomFuncType" resultMap="BaseResultMap,count">
+    <select id="queryObjectListByFloorIdAndRoomFuncType" resultMap="BaseResultMap">
         <include refid="commonQueryObjectListByParam">
             <property name="param" value="#{param}"/>
         </include>
         <if test="null!=param.roomFuncType and param.roomFuncType.length>0">
             AND JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.roomFuncType'))=#{param.roomFuncType}
         </if>
-        <include refid="commonQueryObjectListByParamSuffix">
-            <property name="param" value="#{param}"/>
-        </include>
+        GROUP BY dto.id
     </select>
     <select id="queryObjectListByRelIdAndClassCode" resultMap="BaseResultMap">
         SELECT DISTINCT
@@ -296,8 +269,8 @@
         </if>
         GROUP BY dto.id
     </select>
-    <select id="queryEquipListByClassCode" resultMap="BaseResultMap,count">
-        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+    <select id="queryEquipListByClassCode" resultMap="BaseResultMap">
+        SELECT DISTINCT
         dto.*
         FROM
         dt_object AS dto
@@ -307,9 +280,7 @@
         <if test="null!=param.classCode and param.classCode.length>0">
             AND dto.class_code LIKE CONCAT(#{param.classCode},'%')
         </if>
-        <include refid="commonQueryObjectListByParamSuffix">
-            <property name="param" value="#{param}"/>
-        </include>
+        GROUP BY dto.id
     </select>
 
     <sql id="queryMasterObjSql">
@@ -405,8 +376,8 @@
         </if>
         AND dobj.valid=TRUE
     </select>
-    <select id="queryObjectListByGraphCodeAndRelCode" resultMap="BaseResultMap,count">
-        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+    <select id="queryObjectListByGraphCodeAndRelCode" resultMap="BaseResultMap">
+        SELECT DISTINCT
             dtoA.*,
         IF
             (
@@ -484,13 +455,7 @@
                 </if>
             )
         WHERE dtoA.valid=TRUE AND dtoB.valid=TRUE
-        GROUP BY
-            dtoA.id
-        <include refid="pageSet">
-            <property name="param" value="#{param}"/>
-        </include>
-        ;
-        SELECT FOUND_ROWS() AS totalCount;
+        GROUP BY dtoA.id
     </select>
 
     <select id="queryToData" resultMap="BaseResultMap">

+ 2 - 11
dmp-business/dmp-rwd/src/main/resources/mapper/SystemCustomMapper.xml

@@ -11,14 +11,8 @@
             AND class_code = #{classCode}
         </if>
         AND id in
-        (select obj_from from
-            (
-                select obj_from from dt_relation where rel_code='Sy2Bd' AND graph_code='MechInArch' AND obj_to=#{param.buildingId} AND obj_from not in
-                (select obj_from from dt_relation where rel_code='Sy2Fl' AND graph_code='MechInArch' )  order by id asc
-                <include refid="com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper.pageSet">
-                    <property name="param" value="#{param}"/>
-                </include>
-            ) temp
+        (select obj_from from dt_relation where rel_code='Sy2Bd' AND graph_code='MechInArch' AND obj_to=#{param.buildingId} AND obj_from not in
+        (select obj_from from dt_relation where rel_code='Sy2Fl' AND graph_code='MechInArch' )  order by id asc
         )
     </select>
 
@@ -31,9 +25,6 @@
                 AND class_code = #{classCode}
             </if>
             AND id not in (select obj_from from dt_relation where rel_code='Sy2Bd' AND graph_code='MechInArch' order by id asc) ORDER BY id asc
-            <include refid="com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper.pageSet">
-                <property name="param" value="#{param}"/>
-            </include>
     </select>
 
     <sql id="commonWhereSql">