问题:一对多分页查询时,容易出现数据与页面数据不匹配的现象(基本情况是数据减少)
例如我想要查询10条数据,由于一对多的关系导致最终得到的数据条数变少。原因:由于是先查询后分页然后进行映射,查询到一对多的数据可能一个字段对应了多个结果,然后进行分页后查出的数据就减少了
这是一对多查询出的数据
如果在此基础进行分页那数据肯定就少了许多
解决办法:
先将要查询的数据分页再进行条件筛选查询进行映射(先在表连接查询时,将要分页的表数据替换为分页后的数据)
这样问题不就完美解决了嘛
有兴趣了解其他方法的话可以看下思路
下面这两种方法也是可以实现的,有兴趣的可以根据思路进行试验
使用子查询 (mybatis内部进行子查询)
思路:先查询出要分页的数据,此处先不要进行一对多的映射查询;接着在进行嵌套查询(具体看代码理解意思)
<resultMap id="teacherstudent" type="Teacher" >
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--ofType===泛型集合中实体类类型 JavaType=====java类s属性的类型-->
<collection property="studentList" column="id" ofType="Student" select="getstudentbyid" javaType="ArrayList">
</collection>
</resultMap>
<select id="getTeacherList" resultMap="teacherstudent" >
select * from teacher limit 0,5
</select>
<select id="getstudentbyid" resultType="Student">
select * from student where tid=#{id}
</select>
2.先查询出分页后的数据,然后再进行for循环查询(这是最笨的方法)
先分页查询出所有要分的数据
然后进行循环查询
{ 循环内部根据id进行一对多查询处理,set查询出集合数据 }