IT/development

[mybatis] mybatis multi update(๋‹ค์ค‘ ์—…๋ฐ์ดํŠธ)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2022. 12. 16.

๋ชฉ์ฐจ

    ๋‹ค์ค‘ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ mybatis์—์„œ ์ง€์›ํ•˜๋Š” multi update๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ•œ๋‹ค.
    application.properteis

    #allowMultiQueries=true mybatis multi update ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์ด๊ฑธ ๊ผญ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.
    spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3307/test?characterEncoding=UTF-8&allowMultiQueries=true
    spring.datasource.username=test
    spring.datasource.password=1234

    mapper xml

    <!-- ๋‹ค์ค‘ ์—…๋ฐ์ดํŠธ(์ „์ฒด update๋ฌธ์„ foreach๋กœ ๊ฐ์‹ผ ํ›„ ๊ตฌ๋ถ„์ž๋ฅผ ";"๋กœ ํ•ด์•ผ SQL ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.) -->
    <!-- list๋ฅผ ๋„˜๊ฒจ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— collection์€ list๋กœ ํ•˜๊ณ  ๋ณ„์นญ(item) ์ •ํ•œ ํ›„ item.์œผ๋กœ list์•ˆ์˜ ๊ฐ์ฒด ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. -->
        <update id="updateCommonCodeList" parameterType="list">
            <foreach collection="list" item="item" index="index" separator=";">
                UPDATE  tb_common_code
                SET    code_id            = #{item.codeId}
                      ,code_name          = #{item.codeName}
                      ,code_order         = #{item.codeOrder}
                      ,updater            = #{item.updater}
                      ,update_date        = SYSDATE()
                WHERE  code_no            = #{item.codeNo}
            </foreach>
        </update>

    mapper interface

    // CommonCodeVoํƒ€์ž…์˜ list๋ฅผ ๋„˜๊ธด๋‹ค.
    void updateCommonCodeList(List<CommonCodeVo> commonCodeVoList);

    service

    @Transactional
        public void updateCommonCodeList(List<CommonCodeVo> commonCodeVoList) throws Exception{
            commonCodeMapper.updateCommonCodeList(commonCodeVoList);
        }

    test code

    package com.test.admin.service;
    
    import com.test.admin.vo.CommonCodeVo;
    import lombok.extern.slf4j.Slf4j;
    import org.junit.jupiter.api.DisplayName;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.annotation.Commit;
    import org.springframework.transaction.annotation.Transactional;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    @SpringBootTest
    @Slf4j
    @Transactional	// ์ด ์• ๋…ธํ…Œ์ด์…˜ ์žˆ์œผ๋ฉด ์ฟผ๋ฆฌ ์‹คํ–‰ ํ›„ ๋กค๋ฐฑ
    class CommonCodeServiceTest {
    
        @Autowired CommonCodeService commonCodeService;
    
        @Test
        @DisplayName("๋‹ค์ค‘์—…๋ฐ์ดํŠธ")
        @Commit		// ํด๋ž˜์Šค ๋ ˆ๋ฒจ์— @Transactional์ด ์žˆ์–ด์„œ ์‹ค์ œ DB์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ•์ œ Commit ์„ค์ •์„ ์คŒ
        public void ๋‹ค์ค‘์—…๋ฐ์ดํŠธ() throws Exception {
            //givin
            CommonCodeVo commonCodeVo1 = new CommonCodeVo();
            commonCodeVo1.setCodeId("A05");
            commonCodeVo1.setCodeName("ํ•˜์šฐ์Šค");
            commonCodeVo1.setCodeDesc("์ง‘์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.");
            commonCodeVo1.setUpdater("์•„์ด์–ธ๋งจ");
            commonCodeVo1.setCodeNo(11);
    
            CommonCodeVo commonCodeVo2 = new CommonCodeVo();
            commonCodeVo2.setCodeId("A06");
            commonCodeVo2.setCodeName("ํ“จ๋งˆ");
            commonCodeVo2.setCodeDesc("๋™๋ฌผ ํ“จ๋งˆ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.");
            commonCodeVo2.setUpdater("์„ธ๋ ๊ฒŒํ‹ฐ");
            commonCodeVo2.setCodeNo(12);
    
            CommonCodeVo commonCodeVo3 = new CommonCodeVo();
            commonCodeVo3.setCodeId("A07");
            commonCodeVo3.setCodeName("์‚ฌ์ž");
            commonCodeVo3.setCodeDesc("๋™๋ฌผ ์‚ฌ์ž๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.");
            commonCodeVo3.setUpdater("์‚ฌํŒŒ๋ฆฌ");
            commonCodeVo3.setCodeNo(13);
    
            //when
            // 3๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ list์— ๋‹ด์•„์„œ ์„œ๋น„์Šค์˜ updateCommonCodeList()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
            List<CommonCodeVo> commonCodeVoList = new ArrayList<>();
            commonCodeVoList.add(commonCodeVo1);
            commonCodeVoList.add(commonCodeVo2);
            commonCodeVoList.add(commonCodeVo3);
    		
            commonCodeService.updateCommonCodeList(commonCodeVoList);
            //then
            // ์ƒ๋žต
        }
    }

     

    ๊ฒฐ๊ณผ
    SQL

    DB table

     

    ์‹ค์ œ DB ํ…Œ์ด๋ธ”์˜ CODE_DESC๊ฐ€ NULL๋กœ ๋œ ์ด์œ ๋Š”.. mapper.xml์— ์ˆ˜์ •๋ฌธ์ด ๋ˆ„๋ฝ๋˜์–ด์„œ ๊ทธ๋ ‡๋‹ค.
    ๋‹ค์‹œ ์‚ฌ์ง„์„ ๋ณ€๊ฒฝํ•ด ๊ธ€์„ ์ˆ˜์ •ํ•˜๊ธด ๊ท€์ฐฎ๋‹ค..

    ๋Œ“๊ธ€