本情况比较特殊,为公司业务而适配,仅供参考。
条件查询使用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来代替也是可以的