mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件+count
需求:
========================================
1.主从表数据 是 1:m
2.主从表各自都有查询条件
3.最后查询结果 需要分页,并统计总数
注意:
=======================================
1.查询的分页,必须在数据库做,否则分页没有意义
解决方法:
注意 下面的入参中 [第一页的10条]
pageNum=0PageSize=10
实际入参应该是处理过的
pageNum = pageNum*10pageSize= 10
##############################有对应实体接收查询结果的情况下################################
1.mapper.xml应该这么写
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
2.mapper.java应该这么写
List pageFind(WorksheetDataSaveBean queryBean);
############################### 不确定返回字段类型[即表中属性是动态的,没有对应实体的情况下]###################################
1.mapper.xml中应该这么写
[下面的示例中:因为我不确定返回的字段,所以用HashMap直接接收查询结果后 自己处理的结果集]
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
2.mapper.java应该这么写
List> pageFind(WorksheetDataSaveBean queryBean);
===================================count=============================================
count 是什么?count就是页面的 总共total条数
1.mapper.xml应该这么写
SELECT
count( DISTINCT base.id ) count
FROM
worksheet_data_${dataId} base
LEFT JOIN
worksheet_data_table_data c
ON
c.row_id = base.id
-- 拼接条件的地方
2.mapper.java应该这么写
Long count(WorksheetDataSaveBean queryBean);
====================================附录,完整的 分页+left join+count+不确认返回列+Map接收+mybatis标签嵌套+json字段查询+字符串转日期+字符串转数值+结果集封装处理========================================
需求:
1.数据表 列是动态的多列,因此不确定查询返回是哪些列【因此使用Map接收】
2.主表一行 关联 子表的多行 【因此需要left join】
3.对于主表和子表的所有列,需要提供查询功能【因此需要使用mybatis标签拼接查询条件】
4.主表是正常数据,子表是JSON数据存储【因此需要提供有关JSON字段查询处理的操作】
5.查询出的List结果集 size=主size*子size 【因此,结果集需要将子表数据封装进主表数据集 java处理】
6.上述结果集条数不能作为分页查询的count统计,返回总页码【因此需要额外count()查询,以返回正确的total】
代码参考:
1.Mapper.xml【一个page查询 一个count查询】