두 개의 상호 관련된 데이터 테이블에 유래 에러까지 전면을 반환 할 쿼리시에 순환 된 해결의 MyBatis

원래 코드 디자인 :

사용자 계정, 많은 관계 세트 연관 수집하는 복수의 단일 사용자에 속하는 계정 협회와 상관 관계를 일대일 관계로 하나이고;

UserMapper.xml

<매퍼 네임 스페이스 = "com.xuetu.springboot.mapper.UserMapper"> 

    <! -定义사용자的적인 resultMap -> 
    <resultMap는 ID = "userMap"유형 = "사용자"> 
        <ID 속성 = "ID"열 = " ID "> </ ID> 
        <속성 결과 ="이름 "열에 ="사용자 이름 "> </ 결과> 
        <결과 속성 ="어드레스 "열 ="주소 "> </ 결과> 
        <재산권 결과 ="성 "열 = "섹스"> </ 결과> 
        <특성 = "생일"열 = "생일"> </ 결과를 초래할> 
        <! -配置사용자对象中계정集合的映射-> 
        <컬렉션 속성 = "계정"ofType = " 계정"
                    = "com.xuetu.springboot.mapper.AccountMapper.findAccountByUid"선택 
                    컬럼 = "ID" 
                    /> 
    </ 된 resultMap>

    <! -查询所有-> 
    <SELECT ID = "findall은"된 resultMap = "userMap"> 
        선택에서 사용자 * 
    <선택 /> 

    <! -根据ID查询用户-> 
    <SELECT ID = "findById 메소드"= parameterType "INT"된 resultMap = "userMap"> 
        선택 * 여기서 사용자로부터 ID = # {UID} 
    </ 선택>

  AccountMapper.xml

<매퍼 스페이스 = "com.xuetu.springboot.mapper.AccountMapper"> 
    <resultMap는 ID = "accountMap"TYPE = "계정"> 
        <속성 ID = "ID"열 = "ID"/> 
        <속성 = "UID"초래할 열 = "UID"/> 
        <결과 속성 = "돈"열 = "돈"/> 

        <관계 속성 = "사용자"열 = "UID" 
                     선택 = "com.xuetu.springboot.mapper.UserMapper.findById" 
                     /> 
    </ 된 resultMap> 

    <SELECT ID = "findall은"된 resultMap = "accountMap"> 
        선택 * 계정; 
    <선택 /> 

    <

  

문제 발견

전용 컨트롤러 작동에있는 데이터의 일부 데이터가 전면에 반환되지 않습니다, 그래서 거기에 아무 문제가 없지만, 당신이 JSON에게 형식의 데이터 집합을 반환해야하는 경우 프런트 엔드 쿼리로 SQL 문을 무한 루프로 전환 될 경우, 게으른 로딩을 사용하는 경우 수집 한 관련 문의를 실시하고 개체 선택에 추구하기 때문에, 얻은 객체는 결국 메모리 오버 플로우로 이어지는, 많은 관련 문의,이주기를 실시하고있다.

 

원하는 효과 : 사용자가 컬렉션을 반환하는 경우,이 컬렉션은 개별 사용자 계정 목록 만 (일대), 빈 계정 개체 하나 개를 가리키는입니다

예를 들어 다음과 같은 데이터의 경우 :

[{ "ID"41 "아이디": "老王", "주소": "北京", "성": "男", "생일": "2018-02-27T17 : 47 : 08.000 + 0000" "계정": [{ "ID"1 "UID"41 "돈"1000.0, "사용자"널}, 
{ "ID"3 "UID"41 "돈"3000.0 "사용자"널 (null)}]},
{ "ID": 42, "사용자 이름": "小二王", "주소": "北京金燕龙", "섹스": "女", "생일": "2018 -03-02T15 : 09 : 37.000 + 0000 ","계정 "[]},
{"ID "43"아이디 ":"小二九","주소 ":"北京金燕龙","성 " "女", "생일": "2018-03-04T11 : 34 : 34.000 + 0000", "계정": [{ "ID"2 "UID "43"돈 "2000.0,"사용자 "널}]},
{"ID "45"아이디 ":"传智播客","주소 ":"北京金燕龙","성 " "男", "생일": "2018-03-04T12 : 04 : 06.000 + 0000", "계정": []},
{ "ID": 46, "사용자 이름": "老久", "주소" "北京", "섹스": "女", "생일": "2018-03-07T17 : 37 : 26.000 + 0000", "계정": []}"주소": "北京", "섹스": "女", "생일": "2018-03-07T17 : 37 : 26.000 + 0000", "계정": []}"주소": "北京", "섹스": "女", "생일": "2018-03-07T17 : 37 : 26.000 + 0000", "계정": []}
{ "ID": 48, " 사용자 이름": " 작은 엄마의 Baoli", "주소": "베이징 개정", "섹스": "여성", "생일": "2018-03-08T11 : 44 : 00.000 + 0000" "계정": []},
{ "ID": "홍길동", "주소": "난닝", "섹스": "M", "생일": "2019- (51)는"사용자 이름 "입니다 07-21T06 : 29 : 22.000 + 0000 ","계정 "[]},
{"ID "(52)는"사용자 이름 ":"왕 우 ","주소 ":"림 ","성 ":" M ","생일 ":"2019-07-20T08 : 19 : + 0000 50.000 ","계정 ": []}]

솔루션 : 단일 지점 방법을 추가하기가 연결되어 있지 않습니다
springboot.mapper.AccountMapper. findAccountByUidNoRel "
                    열 ="ID "
                    />
    </ 된 resultMap>

AccountMapper 지역 : <! - 계정 개체를 일반 객체가 아니라 원래 accountMap입니다 반환 ->
<SELECT ID = " findAccountByUidNoRel "resultType = " 계정 "parameterType = "INT"> 
선택 * 계정 여기서 UID = {# UID}
</ 선택>

UserMapper.java接口中新增方法findByIdNoRel :
@Repository 
공용 인터페이스의 UserMapper {
/ **
* 쿼리 모든 사용자, 모든 인수 사용자 계정 정보
* @return
* /
목록 <사용자>는 findall은 ();
// / **
사용자 ID를 기반으로 // * 쿼리 정보
/ / * @param 사용자 ID
// @return *
// * /
사용자 findById 메소드 (정수 사용자 ID)

사용자 findByIdNoRel (정수 사용자 ID);

  요청과 관련된 이러한 반환 된 데이터는 하나의 포인트가 비어 있으므로, @JsonIgnore를 사용하여 직렬화 속성을 무시가 필요 더 이상 서로 없었을 것이다

@JsonIgnoreProperties (값 = { "처리기"}) 
공용 클래스 사용자는 Serializable를 구현 {
개인 정수 ID; 
개인 문자열 이름;
개인 문자열 주소;
......

  최종 사용자는 프런트 엔드 결과를 다시 결과 세트 JSON 형식을 조회 할 수 있습니다 :

[{ "ID"41 "아이디": "老王", "주소": "北京", "성": "男", "생일": "2018-02-27T17 : 47 : 08.000 + 0000" "계정": [{ "ID"1 "UID"41 "돈"1000.0, "사용자"널}, 
{ "ID"3 "UID"41 "돈"3000.0 "사용자"널 (null)}]},
{ "ID": 42, "사용자 이름": "小二王", "주소": "北京金燕龙", "섹스": "女", "생일": "2018 -03-02T15 : 09 : 37.000 + 0000 ","계정 "[]},
{"ID "43"아이디 ":"小二九","주소 ":"北京金燕龙","성 " "女", "생일": "2018-03-04T11 : 34 : 34.000 + 0000", "계정": [{ "ID"2 "UID "43"돈 "2000.0,"사용자 "널}]},
{"ID "45"아이디 ":"传智播客","주소 ":"北京金燕龙","성 " "男", "생일": "2018-03-04T12 : 04 : 06.000 + 0000", "계정": []},
{ "ID": 46, "사용자 이름": "老久", "주소" "北京", "섹스": "女", "생일": "2018-03-07T17 : 37 : 26.000 + 0000", "계정": []}"주소": "北京", "섹스": "女", "생일": "2018-03-07T17 : 37 : 26.000 + 0000", "계정": []}"주소": "北京", "섹스": "女", "생일": "2018-03-07T17 : 37 : 26.000 + 0000", "계정": []}
{ "ID": 48, "사용자 이름": "小马宝莉", "주소": "北京修正", "섹스": "女", "생일": "2018-03-08T11 : 44 : 00.000 + 0000" "계정": []},
{ "ID가": 51, "사용자 이름": "李四", "주소": "广西南宁市", "섹스": "男", "생일": "2019- 07-21T06 : 29 : + 0000 22.000 ","계정 ": []},
{"ID ": 52,"사용자 이름 ":"王五","주소 ":"广西桂林市","섹스 ""男","생일 ":"2019-07-20T08 : 19 : 50.000 + 0000 ","계정 ": []}]
 

 

추천

출처www.cnblogs.com/hcklqy/p/11666936.html