mybatis一对多分页并对关联表条件查询

本情况比较特殊,为公司业务而适配,仅供参考。

条件查询使用PageParams封装,使用mybatis-plus的IPage分页插件返回分页数据

mapper层把pageParams作为参数传入xml

xml部分

因为是一对多所以选用resultMap返回,restMap的部分映射如下


分页查询会根据sql返回的元组进行分页,因为是一对多,元组的数量是由多方累加决定的,比如A与B的关系是一对多,先要对A进行分页,每页选取10个A,即从sql执行结果选取10个元组,一个元组只能表示一个A和一个B,B有多个,所以这10条元组是B数量的累加,这样就选取不到10个A的对象导致分页失真。这时候可以使用mybatis提供的子查询方法

select填另一条查询语句的id,column把父查询语句的某个字段作为参数传递给子查询,然后,mybatis就会把子查询的结果封装为一个集合,设置为A的一个属性,不会破坏A的分页效果

普通的查询可以就此结束。

但如果要对B进行条件查询,即A中的B必须满足一定条件不满足的A不予查询出来,很显然,子查询没办法对父查询进行筛选。

思来想去,只能在父查询里加条件判断了。具体操作如下,使用oracle的exists进行判断,或者用in来代替也是可以的

你可能感兴趣的:(mybatis一对多分页并对关联表条件查询)