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);