【mysql】 mybatis實現 主從表 left join 1:n 一對多 分頁查詢 主表從表都有查詢條件 【mybatis】count 統計

mybatis實現 主從表 left join  1:n 一對多 分頁查詢   主表從表都有查詢條件+countjava

 

需求:數據庫

========================================api

1.主從表數據 是 1:mmybatis

2.主從表各自都有查詢條件app

3.最後查詢結果 須要分頁,並統計總數dom

 

 

注意:spa

=======================================code

1.查詢的分頁,必須在數據庫作,不然分頁沒有意義xml

 

 

 

解決方法:blog

 

注意 下面的入參中 [第一頁的10條]

pageNum=0

PageSize=10

 

實際入參應該是處理過的

pageNum = pageNum*10
pageSize = 10

 

 

 

 

##############################有對應實體接收查詢結果的狀況下################################

1.mapper.xml應該這麼寫

<resultMap type="com.lsrsjava.daywork.domain.week.自定義Bean" id="myResultMap">
    <id column="id" property="id"/>
    <!--一堆的主表 屬性-->
    <result column="userId" property="userId"/>
    <result column="userName" property="userName"/>
    <result column="userImg" property="userImg"/>
    

    
    <!--子表對應的屬性 封裝在list中  即接收了 主表對子表的 1:N -->    
    <collection property="listData" javaType="com.lsrsjava.daywork.domain.week.子表Bean" columnPrefix="slaveTable_">
        <id column="id" property="id"/>
        <result column="rowId" property="rowId"/>
        <result column="colName" property="colName"/>
        <result column="val" property="val"/>
    </collection>
</resultMap>


<select id="pageFind" resultMap="myResultMap" parameterType="com.lqjava.daywork.api.beans.WorksheetDataSaveBean">

  SELECT
    base.id,
    t.id slaveTable_id,
    t.row_id slaveTable_rowId,
    t.col_name slaveTable_colName,
    t.val slaveTable_val
  FROM
    (
        SELECT
            *
        FROM
            worksheet_data_${dataId}
        WHERE
--  此處以後加 主表的 where查詢條件拼接

        LIMIT #{pageNum}, #{pageSize}
    ) base
    LEFT JOIN
        worksheet_data_table_data t
    ON
        base.id = t.row_id
    WHERE
    <!-- 此處以後加 子表單的 where查詢拼接 -->
</select>

 

2.mapper.java應該這麼寫

List<自定義的Bean> pageFind(WorksheetDataSaveBean queryBean);

 

 

############################### 不肯定返回字段類型[即表中屬性是動態的,沒有對應實體的狀況下]###################################

1.mapper.xml中應該這麼寫

[下面的示例中:由於我不肯定返回的字段,因此用HashMap直接接收查詢結果後 本身處理的結果集]

   <select id="pageFind" resultType="java.util.HashMap" parameterType="com.lsrjava.daywork.api.beans.WorksheetDataSaveBean">

      SELECT
        base.*,
        t.id slaveTable_id,
        t.row_id slaveTable_rowId,
        t.col_name slaveTable_colName,
        t.val slaveTable_val
      FROM
        (
            SELECT
                *
            FROM
                worksheet_data_${dataId}
       WHERE -- 此處以後加 主表的 where查詢條件拼接 LIMIT #{pageNum}, #{pageSize} ) base LEFT JOIN worksheet_data_table_data t ON base.id = t.row_id
     WHERE
<!-- 此處以後加 子表單的 where查詢拼接 --> </select>

 

 

2.mapper.java應該這麼寫

List<Map<String,String>> pageFind(WorksheetDataSaveBean queryBean);

 

 

===================================count=============================================

count 是什麼?count就是頁面的 總共total條數

 

1.mapper.xml應該這麼寫

<select id="count" parameterType="com.lqjava.daywork.api.beans.WorksheetDataSaveBean" resultType="java.lang.Long">
    SELECT
        count( DISTINCT base.id ) count
    FROM
        worksheet_data_${dataId} base
    LEFT JOIN
      worksheet_data_table_data c
    ON
      c.row_id = base.id
--         拼接條件的地方

</select>

 

2.mapper.java應該這麼寫

Long count(WorksheetDataSaveBean queryBean);
相關文章
相關標籤/搜索