mybatis多表分页

mybatis的分页是通过拦截器重新拼接SQL,因此分页语句基本都是包含在整个SQL语句外面,那么对于多表查询就会出现查询结果不准确的结果,A与B为一对多关系,A为主表,当使用链接语句查询A和B时,由于A对应的B可能有多条,因此实际的结果是结果集小于A表查询的结果集,采用如下解决方式:

先通过group by id 得到A表的正确的数据集的ID,然后再降得到的ID作为条件再次查找得到数据集

select a.id from A a left join B b on b.no = a.no where ... group by a.id limit 0, 10

select a.*,b.* from A a left join B b on b.no = a.no where ... and a.id in(上一条语句得到的id)

得到正确的分页数据集

时间: 2024-10-13 14:27:26

mybatis多表分页的相关文章

Mybatis Generator实现分页功能

Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页.但是在像Oracle这样的数据库上,拦截器生成的Sql语句没有变量绑定,而且每次语句的都要去拦截,感觉

Mybatis最入门---分页查询(拦截器分页原理及实现)

[一步是咫尺,一步即天涯] 前文,我们演示了物理分页的Sql实现方式,这种方式使得我们每次在编写查询服务时,不断的重复造轮子.这样的代码实现方式就显得十分的笨拙了.本文是Mybatis分页查询的最后一片内容,我们将介绍基于拦截器的,精巧的实现方式.在阅读这篇文章之前,强烈建议各位看官能够先阅读上文.这样就能对下文我们提及的各种对象及他们之间的关系有一个清晰的关系.好了,废话不多讲,开始我们的正文部分吧. 准备工作: a.操作系统 :win7 x64 b.基本软件:MySQL,Mybatis,SQ

MyBatis关联查询分页

背景:单表好说,假如是MySQL的话,直接limit就行了. 对于多对多或者一对多的情况,假如分页的对象不是所有结果集,而是对一边分页,那么可以采用子查询分页,再与另外一张表关联查询,比如: select * from (select * from teacher t limit 0, 2) tt left join clazz ttt on tt.id = ttt.teacher_id; 先对teacher分页,再关联查询.但是这样一来就不太好用mybatis的分页插件统一分页,并且需要自己去

mybatis(单表增删改查)

(mybatis注意各个文件的映射问题) 用到的t_user数据库脚本: -- 导出 mybatis 的数据库结构 CREATE DATABASE IF NOT EXISTS `mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `mybatis`; -- 导出 表 mybatis.t_user 结构 CREATE TABLE IF NOT EXISTS `t_user` ( `id` int(10) NOT NULL AUTO_INCREM

mybatis(单表增删改查useMapper版)

数据库脚本(注意测试时先add-->load-->update-->delete-->list)UserMapper版 -- -------------------------------------------------------- -- 主机: 127.0.0.1 -- 服务器版本: 5.5.36-MariaDB - mariadb.org binary distribution -- 服务器操作系统: Win32 -- HeidiSQL 版本: 8.0.0.4396 --

vue.js-列表分页

<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" cont

mybatis多表关联查询

mybatis多表关联查询 一:在一个对象(User )中建立另一个对象属性(userExtend): public class User implements Serializable{ private static final long serialVersionUID = 1L; /** ID */ private String id; /** 用户名 */ private String username; /** 登录密码 */ private String password; /**

使用mybatis多表联查的时候结果异常及springmvc的理解

今天使用mybatis多表联查的时候,在dos窗口查询时可以出结果集,但是使用mybatis查询的时候最后返回的结果只有最后一个结果 然后研究了半天没弄出来,后来无意中发现添加了最外层从表的ID字段后结果就查出来了,由此可见,数据是由主键来区分的,当主键不在查询范围时,数据默认调用最后一条语句 另外使用springmvc时无法使用实例化service对象,会报空指针异常

Mybatis使用之分页

Mybatis使用之分页 一:简介 注:示例基于mysql数据库.Oracle可以自行测试.   使用Mybatis分页主要有两种方式.一种是将分页参数传递到配置文件中.在写sql的时候就做分页.另一种是使用Mybatis的拦截器拦截需要分页的sql语句.重新组装成具有分页功能的sql语句. 分页查询的关键在于查询时需要告诉数据库从第几条开始取.取多少条记录.也就是常用到Page对象(一般是方便传递参数.自己构建的实体类)的pageNumer.pageSize两个主要参数.至于Page对象的总记