举个例子:
有两个实体类 User 和 Address
public class User {
private int id;
private String username; // 用户名
private List
addresses;// getter setter...
}
public class Address {
private int id;
private String detail; // 详细地址
private User user; //所属用户
// getter setter...
}
数据库:
create table t_user(
id int(10) primary key auto_increment,
username varchar(50)
);
create table t_address(
id int(10) primary key auto_increment,
detail varchar(255),
user_id int(10),
CONSTRAINT FOREIGN KEY (user_id) REFERENCES t_user(id)
);
mybatis映射配置:
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select *,
ta.id as 'a_id',
tu.id as 'u_id'
from t_user tu
left join t_address ta on ta.user_id=tu.id
(username like #{name})
order by ${sort}
${order}
asc
limit #{pageOffset},#{pageSize}
select count(*)
from t_user tu
left join t_address ta on ta.user_id=tu.id
(username like #{name})
用户和地址的关系为:一个用户有多个地址,一个地址只能属于一个用户,一对多
假设现在的需求是,分页查询用户,用表格显示,并把每个用户的所有地址显示出来
那么问题来了
按照上面的查询返回的分页的数据是没有问题的,但是分页的总记录数却是不对的。
比如查出来的数据(数据库数据,并非页面显示)如下:
u_id
username
a_id
detail
1
user1
1
北京市海淀区
1
user1
2
北京市朝阳区
2
user2
3
天津市
因为我的需求是分页显示用户,所以一个用户就是一条数据在页面显示大概是这样子,理论上是两条数据,
用户id
用户名
地址
1
user1
1. 北京市海淀区
2. 北京市朝阳区
2
user2
1. 天津市
共1页,共2条数据,每页显示10条
但是,按mybatis的find_count配置 查出来是3条,这种问题如何解决?
查询count(*)的时候将所有left join 后面关联的表去除吗?这样会不会导致返回的数据不准确
补充说明:感觉大家是理解错我的意思了,其实我这个问题主要是在SQL 上,而不再mybatis上,因为我查询出来的数据映射完毕之后是完全没有问题的,只是在分页的总记录数上出现了问题,导致分页不正确