MybatisPlus + SpringBoot + Vue 实现自定义联表查询,返回 HashMap<String, Object> 条件,分页,模糊,total

MybatisPlus + SpringBoot + Vue 实现自定义联表查询,返回 HashMap 条件,分页,模糊,total

MybatisPlus 极大的简化了单表查询的重复操作,但是在联表的时候,特别是在查询的结果集没有对应实体类的时候,就还要手写sql,手写分页和模糊,返回HashMap对象。这里我写一个Demo,以方便以后的开发中遇到这种情况。

mapper.xml

<select id="getBillApplicationJzFile" resultType="hashmap" parameterType="java.util.Map">
        SELECT a.APPLICATION_NAME AS applicationName,
               a.APPLICATION_CODE AS applicationCode,
               a.APPLICATION_ID AS applicationId,
               c.FILE_NAME AS fileName,
               c.FILE_PATH AS filePath,
               a.CREATE_TIME AS createTime,
               a.SEAL_FILE_DOWNLOAD_FLAG AS sealFileDownloadFlag
        FROM SOM_BILL_APPLICATION a
                 JOIN som_electronic c ON a.sorg_id = c.SORG_ID
        WHERE a.STATUS = '2'
        AND c.CATALOG_CODE = 'ff86c839f98611eb8188005056a957d6'
        <if test="map.sealFileDownloadFlag != null and map.sealFileDownloadFlag != ''">
            AND a.SEAL_FILE_DOWNLOAD_FLAG=#{map.sealFileDownloadFlag}
        if>
        <if test="map.applicationName != null and map.applicationName != ''">
            AND a.APPLICATION_NAME LIKE CONCAT('%', #{map.applicationName}, '%')
        if>
        ORDER BY a.CREATE_TIME ASC LIMIT #{map.pageSize}
        OFFSET #{map.page}
    select>

    <select id="getTotalCount" resultType="int" parameterType="java.util.Map">
        SELECT COUNT(*)
        FROM SOM_BILL_APPLICATION a
        JOIN som_electronic c ON a.sorg_id = c.SORG_ID
        WHERE a.STATUS = '2'
        AND c.CATALOG_CODE = 'ff86c839f98611eb8188005056a957d6'
        <if test="map.sealFileDownloadFlag != null and map.sealFileDownloadFlag != ''">
            AND a.SEAL_FILE_DOWNLOAD_FLAG=#{map.sealFileDownloadFlag}
        if>
        <if test="map.applicationName != null and map.applicationName != ''">
            AND a.APPLICATION_NAME LIKE CONCAT('%', #{map.applicationName}, '%')
        if>
    select>

mapper interface


    List<HashMap<String, String>> getBillApplicationJzFile(@Param("map")HashMap<String,Object> map);
    Integer getTotalCount(@Param("map")HashMap<String,Object> map);
    

service interface

    HashMap<String, Object> getBillApplicationJzFile(ParameterSet pset);

service.java

    @Override
    public HashMap<String, Object> getBillApplicationJzFile(ParameterSet pset) {
        JSONObject params = pset.getParams();

        long pageSize = Long.parseLong(params.getString("pageSize"));
        long pageNum = Long.parseLong(params.getString("page"));
        if (pageSize == 0) {
            pageSize = Long.parseLong("10");
        }
        if (pageNum == 0) {
            pageNum = Long.parseLong("1");
        }
        String sealFileDownloadFlag = params.getString("sealFileDownloadFlag") == null ? "" : params.getString("sealFileDownloadFlag");
        String applicationName = params.getString("applicationName") == null ? "" : params.getString("applicationName");

        HashMap<String, Object> map = new HashMap<>();
        map.put("sealFileDownloadFlag", sealFileDownloadFlag);
        map.put("applicationName", applicationName);
        map.put("pageSize", pageSize);
        map.put("page", (pageNum - 1) * pageSize);
        
        HashMap<String, Object> resultMap = new HashMap<>();
        resultMap.put("records", somBillApplicationMapper.getBillApplicationJzFile(map));
        resultMap.put("total", somBillApplicationMapper.getTotalCount(map));

        return resultMap;
    }

controller.java

    @RequestMapping(value = "/getApplicationBillSealFile", method = RequestMethod.POST)
    public Result getApplicationBillSealFile(@RequestBody ParameterSet pset) {
        try {
            HashMap<String, Object> billApplicationJzFile = somBillApplicationService.getBillApplicationJzFile(pset);
            return Result.succ(billApplicationJzFile);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return Result.fail(e.getMessage());
        }
    }

js

export function getApplicationBillSealFile(data) {
  return request({
    url: 'xxx/xxxxx/getApplicationBillSealFile',
    method: 'post',
    baseURL: baseURL.sorg,
    data: JSON.stringify({ params: data })
  })
}

vue

  // params: {page: 1, pageSize: 10, sealFileDownloadFlag: '',applicationName:''},
    loadTableData() {
      let map = this.params;
      getApplicationBillSealFile(map).then((data) => {
        console.log(data, "getApplicationBillSealFile");
        this.tableData = data.data.records;
        this.total = data.data.total;
      });
    }

你可能感兴趣的:(spring,boot,后端,java)