IT/development

[mybatis] mybatis parameter ์—ฌ๋Ÿฌ๊ฐœ ์ „๋‹ฌ

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

๋ชฉ์ฐจ

    ์˜ˆ๋ฅผ ๋“ค์–ด Stringํƒ€์ž…์˜ "status"์™€ Longํƒ€์ž…์˜ no, 2๊ฐœ์˜ parameter๊ฐ’์„ ๋ฐ›์•„์„œ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๋Š” ๋กœ์ง์ด ์žˆ์„ ์‹œ VO์งธ๋กœ ๋„˜๊ธฐ๊ธฐ์—” ๋ญ”๊ฐ€ ๋น„ํšจ์œจ์ ์ด๊ณ  ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ๋ดค์„ ๋•Œ๋„ ์ง๊ด€์ ์ด์ง€ ์•Š์•„ ๋ณด์˜€๋‹ค.

    ๋ฌผ๋ก  ์ถ”ํ›„์— ๋„˜๊ธฐ๋Š” parameter๊ฐ’์ด ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ์—” VO์งธ๋กœ ๋„˜๊ธฐ๋Š”๊ฒŒ ํ™•์žฅ์„ฑ์ด ์žˆ๊ฒ ์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์€ ๊ทธ๋Ÿฐ๊ฒŒ ์•„๋‹ˆ์—ˆ๋‹ค.

    ๊ทธ๋ž˜์„œ ๊ตฌ๊ธ€๋ง ํ•˜๋‹ค๊ฐ€ ์—ญ์‹œ๋‚˜ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์„œ ๋ฏธ๋ž˜์˜ ๋‚ด๊ฐ€ ๋ณด๊ธฐ์œ„ํ•ด ๊ธฐ๋กํ•œ๋‹ค.

    1. HashMap ์ด์šฉ ๐Ÿ˜„

    Controller์—์„œ HashMap์— ๋‹ด์•„์„œ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ•

    Controller

    HashMap์— parameter๊ฐ’ ๋‹ด์•„์„œ ์ „๋‹ฌ

    HashMap<String, Object> param = new HashMap<>();
    param.put("no", no);
    param.put("status", status);

    Service

    public void updateStatus(HashMap<String, Object> param) throws Exception;

    impl

    public void updateStatus(HashMap<String, Object> param) throws Exception {
    	userMapper.updateStatus(param);
    }

    Mapper

    public void updateStatus(HashMap<String, Object> param);

    xml

    parameterType์„ "HashMap"์œผ๋กœ ์„ค์ •

    <update id="updateStatus" parameterType="HashMap">
    UPDATE member
        SET status = #{status, jdbcType=VARCHAR}
        WHERE no = #{no, jdbcType=BIGINT}
    </update>

    2. @Param ์ด์šฉ ๐Ÿ˜ƒ

    Controller์—์„œ parameter๊ฐ’ 2๊ฐœ๋ฅผ ๊ฐ๊ฐ ๋„˜๊ธฐ๊ณ  mapper์—์„œ @Param ์–ด๋…ธํ…Œ์ด์…˜ ์ ์šฉ, xml์—์„œ parameterType์„ map์œผ๋กœ ์ž‘์„ฑ

    Controller

    userService.updateStatus(no, status);

    Service

    public void updateStatus(Long no, String status) throws Exception;

    impl

    public void updateStatus(Long no, String status) throws Exception {
    	userMapper.updateStatus(no, status);
    }

    mapper

    ๋„˜๊ธธ parameter๊ฐ’์— @Param ์ ์šฉ

    import org.apache.ibatis.annotations.Param;
    
    public void updateStatus(@Param("no") Long no, @Param("status")String status);

    xml

    parameterType์„ "map"์œผ๋กœ ์„ค์ •

    <update id="updateStatus" parameterType="map">
    UPDATE member
        SET status = #{status, jdbcType=VARCHAR}
        WHERE no = #{no, jdbcType=BIGINT}
    </update>

    ๊ธฐํƒ€, parameter ์ค‘ ๋ฐฐ์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ

    [ex](Long memNo, Long[] ClientNo)๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฒฝ์šฐ 

    DB์— insert ์‹œ param๊ฐ’ 2๊ฐœ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ทธ ์ค‘ 1๊ฐœ๋Š” ๋‹จ์ผ๊ฐ’, ๋‚˜๋จธ์ง€ 1๊ฐœ๋Š” ๋ฐฐ์—ด๋กœ ๋ฐ›๋Š” ๊ฒฝ์šฐ์˜€์Œ

    ํ•„๋“œ๊ฐ’์ด 2๊ฐœ๋ฐ–์— ์—†์–ด์„œ DTO๋ฅผ ๋งŒ๋“ค๊ธฐ๋Š” ๊ท€์ฐฎ์•˜์Œ

    ์˜ค๋žœ ์‚ฝ์งˆ ๋์— ๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ–ˆ์Œ(๋ฌผ๋ก  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์žˆ์Œ)

    Controller

    @RequestParam(required = true) Long[] code_seq,        
    ์ƒ๋žต...
    // ํ…Œ์ด๋ธ” ์ €์žฅ ์‹œ selectKey๋กœ ๋ฝ‘์€ ๊ฐ’์ด VO์— ์ €์žฅ๋จ
    TestService.insert(VO);
    // ๋งคํ•‘ ํ…Œ์ด๋ธ” ์ €์žฅ ์‹œ ์œ„์˜ vo์— ๋‹ด๊ธด seq๊ฐ’์„ ๋„˜๊น€, code_seq๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›๋Š” ๋ฐฐ์—ด๊ฐ’
    Service.insertMapping(VO.getSeq(), code_seq);

    service

    public void insertMapping(Long seq, Long[] code_seq) throws Exception {
    		Mapper.insertMapping(seq, code_seq);
    	}

    mapper

    ์—ญ์‹œ parameter๊ฐ’์ด 1๊ฐœ ์ด์ƒ์ด๋ผ @param์„ ๋ช…์‹œํ•จ

    public void insertMapping(@Param("seq") Long seq, @Param("code_seq") Long[] code_seq);

    xml

    <insert id="insertMapping" parameterType="map">
    		INSERT INTO mapping
    		(
    		 	seq,
    			code_seq,
    			reg_date
    		)
    		VALUES
            <!-- ์ด ๊ฒฝ์šฐ๋Š” collection์— array๊ฐ€ ์•„๋‹ˆ๋ผ parameter๊ฐ’์œผ๋กœ ๋„˜๊ธด ๋ณ€์ˆ˜๋ช…์„ ์ž…๋ ฅํ•ด์•ผ ํ•จ--> 
    		<foreach collection="code_seq" item="code_seq" separator=",">
    		(
    		 	#{seq},	<!-- ๋‹จ์ผ๊ฐ’์œผ๋กœ ๋„˜๊ธด param๊ฐ’ -->
    		 	#{code_seq},	<!-- ๋ฐฐ์—ด๋กœ ๋„˜๊ธด param๊ฐ’ --> 
    			NOW()
    		)
    		</foreach>
    	</insert

     


    ๊ฐœ์ธ ์Šคํ„ฐ๋”” ๊ธฐ๋ก์„ ๋ฉ”๋ชจํ•˜๋Š” ๊ณต๊ฐ„์ด๋ผ ํ‹€๋ฆฐ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ‹€๋ฆฐ ์  ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    ๋Œ“๊ธ€