java - Mybatis 데이터베이스 다중 테이블 관련 페이징 문제
黄舟
黄舟 2017-06-10 09:49:39
0
6
1516

예:
사용자와 주소라는 두 개의 엔터티 클래스가 있습니다

으아악

데이터베이스:

으아악

mybatis 매핑 구성:

으아악

사용자와 주소의 관계는 다음과 같습니다. 한 사용자는 여러 개의 주소를 갖고, 하나의 주소는 한 명의 사용자에게만 속할 수 있으며, 일대다
현재 수요는 페이지에서 사용자를 쿼리하고, 이를 테이블에 표시하고, 모두 표시하는 것입니다. 각 사용자의 주소가 나오네요
그러면 문제가 옵니다
위 쿼리에 따라 반환된 페이징 데이터에는 문제가 없지만 총 페이징 기록 수가 잘못되었습니다.
예를 들어 검색된 데이터(페이지 표시가 아닌 데이터베이스 데이터)는 다음과 같습니다.

u_id 사용자 이름 a_id 세부사항
1 user1 1 베이징 하이뎬구
1 user1 2 베이징 차오양구
2 user2 3 천진시

제 요구 사항은 사용자를 페이지에 표시하는 것이므로 사용자는 페이지에 표시되는 데이터 조각입니다. 이론적으로는 다음과 같은 두 조각의 데이터입니다.

사용자 ID사용자 이름주소1user1 1. 베이징 하이뎬구 2. 베이징 조양구 2user21. 텐진시총 1페이지, 총 2개의 데이터, 각 페이지에는 10개의 데이터가 표시됩니다
그런데 mybatis의 find_count 구성에 따르면 3가지 항목이 있는 것으로 나타났습니다. 이 문제를 해결하려면 어떻게 해야 할까요?

count(*)를 쿼리할 때 왼쪽 조인과 관련된 모든 테이블을 제거해야 합니까? 이로 인해 반환된 데이터가 부정확해 집니까?


추가 설명: 사실 제 문제는 주로 mybatis가 아닌 SQL에 관한 것입니다. 제가 쿼리한 데이터가 매핑된 후에는 전혀 문제가 없었고 단지 페이징뿐이었기 때문입니다. 총 레코드 수에 문제가 있어 잘못된 페이징이 발생합니다

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(6)
漂亮男人

예제를 작성하고 테스트해봤습니다

`

두 개의 엔터티 클래스
public 클래스 사용자 {

으아악

공개 수업 주소 {

으아악

매핑 파일
<resultMap type="com.atguigu.mybatis.entity.User" id="userMap" autoMapping="true">

으아악

<!-- tu.,ta., -->
<!-- ta.id를 'a_id'로 선택, -->
<!-- tu.id를 'u_id'로 선택 -->
<!-- t_user tu에서, -->
<!-- t_address ta 여기서 ta.user_id=tu.id -->

으아악

테스트 결과

캡슐화된 List<User>의 크기는 문제가 되지 않습니다.

左手右手慢动作

키워드를 그룹화하고 구체적인 동작을 직접 확인해보세요

学霸

으아악

두 개의 항목을 원했지만 SQL이 세 개의 항목을 찾으면 오류가 표시됩니다.
논리를 분할해야 합니다.
먼저 원하는 사용자를 찾아야 합니다

으아악

그럼

으아악

??사용자ID를 이용해서 List<Address>를 직접 확인하는 방법이에요

学霸

이 경우에는 페이징을 할 수 없습니다. 메인 테이블 데이터를 페이징해야 합니다.

원래는 100개의 데이터를 쿼리했는데, 일대다 방식은 많은 양의 데이터를 접어서 중복을 제거하기 때문에 실제 결과는 100개 미만이었습니다.

이 경우 중첩 쿼리를 사용하여 문제를 해결할 수 있으며, 이는 N+1 실행이 필요하고 느리게 로드될 수 있습니다.

또는 여기를 보세요: https://my.oschina.net/flags/...

MyBatis 콘텐츠를 보려면 http://mybatis.tk

를 방문하세요.
扔个三星炸死你

으아악

변경:

으아악
曾经蜡笔没有小新

서브 쿼리를 사용해도 문제 없습니다

으아악

저자는 Mybatis-PageHelpercount SQL 변환 구현

을 살펴볼 수 있습니다.

Paging을 구현하려면 작성자가 직접 Mybatis-PageHelper를 사용하는 것이 좋습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿