MyBatis分页返回数据不对问题
来源:互联网 发布:淘宝换主图会影响排名 编辑:程序博客网 时间:2024/04/27 21:35
转载地址:http://blog.csdn.net/wangpeng047/article/details/17617719
使用mybatis的分页时,一定要注意使用方法。
当表关系为一对多、多对多时,普通直接分页是有问题的,例如:
一个老师有多个学生,假设每个老师有2个学生,一共有15名老师,此时分页查询老师,每页显示10条。然而查询到的结果是:每页老师只有5名,一共有3页。
sql语句:
select * from Teacher t inner join Student s on t.id = s.teacher_id where t.clazz_id = ? limit 0,10
原因:由于老师与学生是一对多,那么用join语句查询老师时,记录一共实际上是有30条的,每个老师会重复两遍(而学生的数据是不同的),那么分页虽然出来的是10条,然而有一半老师数据是重复的,经mybatis转化成对象后,就是有5个老师(每个老师里有2个学生,共10个学生)。总数由于是30条,那么总页数自然也会算成3页了。
那么遇到这种情况怎么办呢?
正确的做法是:分成2条sql语句
sql语句一:select t.id from Teacher t inner join Student s on t.id = s.teacher_id where t.clazz_id = ? group by t.id limit 0,10
sql语句二:select * from Teacher t inner join Student s on t.id = s.teacher_id where t.id in (?,?,?,?,?,?,?,?,?,?)
第一个sql语句的目的是根据查询条件进行分页查询,通过group by语句对老师进行分组排重。
第二个sql语句的目的是关联查询出满足分页条件的老师id的所有老师及学生的信息。
总结:造成分页错误的原因是join的表是多的一端,但由于查询条件中可能会有多的一端的条件,又不得不join关联,因此必须采用group by语句排重,但我们希望通过mybatis将所有对象关系的信息都返回,因此还要发条sql语句关联查询出所有表的信息。
- MyBatis分页返回数据不对问题
- MyBatis分页返回数据不对问题
- Mybatis关联查询一对多使用插件分页返回数据不对
- 3DES 返回数据不对
- jqPaginator分页样式不对的问题
- Mybatis返回重复数据
- VS2008下使用Linq To Entity的Skip().Take()分页查询时遇到数据结果不对的问题
- SQLserver-mybatis分页问题
- ThinkPHP 中 M 方法查询数据库最后使用 find() 导致返回结果集 foreach 数据不对的问题
- MyBatis返回值问题
- Mybatis返回值问题
- dedecms自定义表单数据校验不对,程序返回问题解决
- 织梦dedecms数据校验不对,程序返回解决方法
- 织梦dedecms数据校验不对,程序返回解决方法
- mybatis入门字段与属性不对应问题(三)
- ArrayList.contains(obj o)出现返回结果不对的问题
- MyBatis数据分页的实现
- mybatis 插入数据返回ID
- bit、 Byte、 symbol 和 chip 的比较
- 收藏链接分享
- IOS8以上版本,使用UIAlertController代替 UIActionSheet和UIAlertView
- 简明 Python 教程 第9章 数据结构
- 设置 UISearchBar 输入字体颜色 和 默认字体颜色
- MyBatis分页返回数据不对问题
- iOS开发UI篇—CAlayer(自定义layer)
- 【大渣】【博弈】取石子游戏
- Android性能优化之渲染篇
- CodeMirror事件和常用方法
- 勾勒一个Windows窗口程序
- gdb 命令列表
- 使用JMeter 完成常用的压力测试
- Oracle中常用时间操作的汇总