resultMap 의 용법 및 관련 결과 집합 맵

resultType
resultType 은 조회 결 과 를 pojo 형식 에 밀봉 할 수 있 지만 pojo 류 의 속성 명 과 조회 한 데이터베이스 시트 의 필드 이름 이 일치 해 야 합 니 다.
sql 에서 조회 한 필드 가 pojo 의 속성 명 과 일치 하지 않 으 면 resultMap 을 사용 하여 필드 이름과 속성 명 을 대응 시 켜 수 동 으로 패키지 설정 을 하여 결 과 를 pojo 에 표시 해 야 합 니 다.
resultMap
resultMap 은 검색 결 과 를 복잡 한 유형의 pojo 로 표시 할 수 있 습 니 다.예 를 들 어 검색 결과 맵 대상 에 pojo 와 list 를 포함 하여 1 대 1 조회 와 1 대 다 중 조 회 를 실현 할 수 있 습 니 다.
这里写图片描述
먼저 Mapper 파일 에 기본 sql 문 구 를 설정 합 니 다.

<!--           -->
    <!-- resultMap:     resultMap   id  -->
    <select id="queryOrderAll" resultMap="orderResultMap">
        SELECT id, user_id,
        number,
        createtime, note FROM `order`
    </select>
resultMap 탭 을 설정 하고 필드 와 속성 이름 을 표시 합 니 다.

<!-- resultMap           pojo ,type          pojo -->
    <!-- id:  ResultMap id -->
    <resultMap type="order" id="orderResultMap">
        <!--      ,    。       ,     id -->
        <!-- property:   pojo      -->
        <!-- column:           -->
        <id property="id" column="id" />

        <!--        -->
        <result property="userId" column="user_id" />
        <result property="number" column="number" />
        <result property="createtime" column="createtime" />
        <result property="note" column="note" />
    </resultMap>
결 과 는 pojo 형식 에 봉 인 될 수 있 습 니 다.
resultMap 을 사용 하여 관련 조 회 를 진행 합 니 다.
일대일 조회
일대일 데이터 모델:주문 사용자
하나의 주문 정 보 는 한 사람 이 내 린 주문 일 수 있 기 때문에 주문 정 보 를 조회 하 는 것 에서 출발 하여 관련 조회 사용자 정 보 를 일대일 로 조회 합 니 다.사용자 정보 에서 출발 하여 사용자 의 주문 정 보 를 조회 하면 한 쌍 의 다 중 조회 입 니 다.왜냐하면 한 사용자 가 여러 개의 주문 을 할 수 있 기 때 문 입 니 다.
这里写图片描述
개조 pojo 류
주문 류 에 User 속성 을 추가 합 니 다.User 속성 은 참조 형식 으로 관련 조회 의 사용자 정 보 를 저장 하 는 데 사 용 됩 니 다.관련 관 계 는 1 대 1 이기 때문에 하나의 속성 만 추가 하면 됩 니 다.
这里写图片描述
Mapper.xml 프로필 설정
OrderMapper.xml
id 와 result 속성 을 사용 하여 order 류 의 결과 집합 을 매 핑 한 다음,association 을 사용 하여 관련 대상 User 의 결과 집합 을 매 핑 합 니 다.

<resultMap type="order" id="orderUserResultMap">
    <id property="id" column="id" />
    <result property="userId" column="user_id" />
    <result property="number" column="number" />
    <result property="createtime" column="createtime" />
    <result property="note" column="note" />

    <!-- association :        -->
    <!-- property:order   User    -->
        <!-- javaType:     -->
    <association property="user" javaType="user">
        <!-- id:    ,  user_id            -->
        <id property="id" column="user_id" />
        <result property="username" column="username" />
        <result property="address" column="address" />
    </association>

</resultMap>

<!--      ,    ,           -->
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
    SELECT
    o.id,
    o.user_id,
    o.number,
    o.createtime,
    o.note,
    u.username,
    u.address
    FROM
    `order` o
    LEFT JOIN `user` u ON o.user_id = u.id
</select>
테스트

@Test
public void testQueryOrderUserResultMap() {
    // mybatis spring  ,    ,  spring  
    SqlSession sqlSession = this.sqlSessionFactory.openSession();
    //   Mapper         ,    ,  spring  
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    //   userMapper          ,     Order  
    List<Order> list = userMapper.queryOrderUserResultMap();
    for (Order o : list) {
        System.out.println(o);
    }
    // mybatis spring  ,    ,  spring  
    sqlSession.close();
}
결실
这里写图片描述
한 쌍 의 다 중 조회
모든 사용자 정보 및 관련 주문 서 를 조회 합 니 다.
pojo 류 를 수정 하여 pojo 류 에 주문 집합 속성 을 추가 합 니 다.
这里写图片描述
UserMapper.xml 프로필 수정
먼저 id 와 result 를 사용 하여 사용자 클래스 의 결 과 를 매 핑 한 다음 다 중 관계 의 collection 태그 로 Order 결 과 를 설정 합 니 다.

<resultMap type="user" id="userOrderResultMap">
    <id property="id" column="id" />
    <result property="username" column="username" />
    <result property="birthday" column="birthday" />
    <result property="sex" column="sex" />
    <result property="address" column="address" />

    <!--         
        property:  pojo           
        javaType:          
    -->
    <collection property="orders" javaType="list" ofType="order">
        <!--     ,   Order      -->
        <id property="id" column="oid" />
        <result property="number" column="number" />
        <result property="createtime" column="createtime" />
        <result property="note" column="note" />
    </collection>
</resultMap>

<!--      ,                -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
    SELECT
    u.id,
    u.username,
    u.birthday,
    u.sex,
    u.address,
    o.id oid,
    o.number,
    o.createtime,
    o.note
    FROM
    `user` u
    LEFT JOIN `order` o ON u.id = o.user_id
</select>
테스트 결과
这里写图片描述
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기