【 ORM 】 Mybatis 멀 티 필드 조합 이 유일 하고 데 이 터 를 대량으로 추가 합 니 다.

머리말
현재 보편적 인 관계 형 데이터 베이스 개발 은 my batis 라 는 우수한 지구 층 구조 와 떨 어 질 수 없다.한편, 보편적 인 업무 장면 에서 도 짧 은 시간 에 고주파 의 첨삭 작업 이 자주 발생 한다.이렇게 짧 은 시간 동안 고주파 로 작 동 하 는 것 은 보통 두 가지 실현 방안 이 있 습 니 다. 첫 번 째 는 비교적 흔히 볼 수 있 는 것 입 니 다. 코드 에서 순환 을 작성 하고 지구 층 에서 한 번 의 작업 을 합 니 다.다른 하 나 는 my batis 를 통 해 지구 층 에서 데 이 터 를 직접 대량으로 조작 하 는 것 이다.my batis 의 대량 도 메모리 에서 작 동 되 지만 처음부터 끝까지 sqlSession 만 열 렸 습 니 다. 이전 방안 보다 비용 이 훨씬 적 습 니 다.
구체 적 인 장면
예 를 들 어 현재 하나의 업무 장면 이 있다. a, b, c 세 필드 가 모두 같은 상황 에서 d 필드 를 비교 하고 일정한 조건 에서 기록 (전체) 을 꺼 내야 한다.
해결 방향
4. 567917. 우선, 표 에 변경 이 없 는 상황 에서 저 는 순수한 sql 로 문 제 를 해결 하려 고 합 니 다.sql 차원 에서 업무 논 리 를 작성 할 때 not in 이나 not exists 를 피 할 수 없습니다. 데이터 양 이 많 지 않 은 상황 에서 이렇게 쓰 는 것 은 문제 가 없습니다.그러나 표 에 있 는 데이터 가 수만, 심지어 10 만 을 기록 하면 이러한 sql 효율 은 현저히 떨어진다
4. 567917. 그러면 우 리 는 두 번 째 방향 으로 표 에 대해 제약 을 하고 표 + sql 의 형식 을 바 꾸 어 업무 문 제 를 해결 합 니 다
해결 방안
4. 567917. step 1: 표 의 세 필드 에 대해 다 중 필드 조합 을 하 는 유일한 제약 은 표 의 세 필드 를 조합 해 야 전체 표 가 유일 하 다 는 것 을 알려 줍 니 다
ALTER TABLE table_a ADD UNIQUE(a,b,c)

4. 567917. step 2: 대량 조회 문 구 를 구축 하여 업무 수 요 를 실현 한다.두 번 째 단 계 를 시작 하기 전에 두 가지 지식 을 보충 해 야 한다.첫 번 째 지식: my batis 의 대량 조회.my batis 에서 대량 sql 조합 작업 은 'foreach' 라 는 탭 을 통 해 이 루어 집 니 다.간단하게 세 가지 인자: collection, item, separator.collection 값 은 반복 되 는 집합 형식 입 니 다.item: 변수 이름, 값 은 교체 대상 에서 추출 한 모든 요소 입 니 다.separator: sql 에 연 결 된 요소 의 구분자 입 니 다.두 번 째 지식 포인트: on duplicate key update 키워드.이 키 워드 는 유일한 제약 필드 나 메 인 키 가 중복 되면 update 작업 을 수행 한 다 는 뜻 입 니 다.values () 상자 에 있 는 필드 는 집합 요소 에서 값 을 추출 하고 해당 필드 로 업데이트 하 는 것 을 의미 합 니 다
구체 적 인 코드:
	<insert id="insertByBatchWithNotExist" parameterType="java.util.List">
        insert into
        table_a (a,b,c,d)
        values
        <foreach
                collection="list" item="item" separator=",">
            (
            #{item.a},
            #{item.b},
            #{item.c},
            #{item.d}
            )
        foreach>
        on duplicate key update
        a = a + 1,
        b = values(b),
        c = values(c)
    insert>

좋은 웹페이지 즐겨찾기