mysql多条件分页查询_【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询...

本文详细介绍了如何使用MyBatis实现主从表left join的一对多分页查询,同时涵盖主从表都有查询条件的情况。强调了分页必须在数据库层面完成,提供了mapper.xml和mapper.java的代码示例,包括count统计总数的方法。还讨论了动态返回字段类型、JSON字段查询和结果集封装处理等复杂场景。
摘要由CSDN通过智能技术生成

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查询】

8f900a89c6347c561fdf2122f13be562.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值