Mybatis 주석 대량 삽입 자동으로 생성된 id 반환

9108 단어 MySQL
배경.
A표에 대량으로 데이터를 삽입한 다음에 삽입한 데이터의 메인 키를 되돌려야 합니다.유수기록표 B에 저장합니다.
표 구조
두 테이블 구조 테이블 A
CREATE TABLE `channel_link` (                                                                          
  `id` int(11) NOT NULL AUTO_INCREMENT,                                                                
  `channel_id` int(11) NOT NULL COMMENT '  id',                                                      
  `recruit_type` int(11) NOT NULL COMMENT,                                     
  PRIMARY KEY (`id`)                                                                                   
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='    '

표 B
CREATE TABLE `channel_operate_history` (                                                      
  `id` int(11) NOT NULL AUTO_INCREMENT,                                                       
  `operate_target_type` int(11) NOT NULL COMMENT '    ',     
  `operate_target_record_id` int(11) NOT NULL COMMENT '          id',                                         
  PRIMARY KEY (`id`)                                                                          
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='      '     

구체적 실현
매개 변수는 @Param의 이름을 마퍼 파일이나 Insert 주석의collection의 내용과 대응합니다.
코드 레이어 DAO
    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert({
            ""</span><span class="token punctuation">,</span>
            <span class="token string">"insert into "</span><span class="token punctuation">,</span> table<span class="token punctuation">,</span> ALL_COLUMNS_NO_ID<span class="token punctuation">,</span> <span class="token string">" values"</span><span class="token punctuation">,</span>
            <span class="token string">"<foreach item='item' collection='list' open='' separator=',' close=''>"</span><span class="token punctuation">,</span>
            INSERT_VALUES_NO_ID<span class="token punctuation">,</span>
            <span class="token string">"</foreach>"</span><span class="token punctuation">,</span>
            <span class="token string">""
    })
    int batchInsert(@Param("list") List<ChannelLink> channelLinks);

서비스 계층
	List<ChannelLink> models = generateModels(param);
	//ids              id.
	List<Integer> ids = models.foreach(model -> ids.add(model.getId());
	doSomethingsWithIds(ids);

참고 자료
실천 1:https://blog.csdn.net/shujukuss/article/details/79957827 github issue:https://github.com/mybatis/mybatis-3/pull/324

좋은 웹페이지 즐겨찾기