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