๐Ÿ“š[Spring] Scheduler ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…_1

ํ…ํ…ยท2025๋…„ 5์›” 12์ผ
post-thumbnail

SimpleJdbcInsert ๋Š” ๋ฉ์ฒญํ•˜๋‹ค.

JdbcTemplate์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘ SimpleJdbcInsert ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
๋ณ„๋„์˜ SQL ์—†์ด ํ…Œ์ด๋ธ” ์ด๋ฆ„๊ณผ ์ปฌ๋Ÿผ-๊ฐ’๋งŒ ๋„˜๊ธฐ๋ฉด ์ž๋™์œผ๋กœ insert ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์•„์ฃผ ์Šค๋งˆํŠธํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ์ค„๋งŒ ์•Œ์•˜๋Š”๋ฐ...๐Ÿซ 


saveSchedule()

SimpleJdbcInsert๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ๋กœ password, task, author ๋ฅผ RequestBody ๋กœ ๋ฐ›์•„ DB์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

    @Override
    public Long saveSchedule(Schedule schedule) {
        SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        simpleJdbcInsert.withTableName("schedule").usingGeneratedKeyColumns("id");

        Map<String, Object> params = new HashMap<>();
        params.put("password", schedule.getPassword());
        params.put("task", schedule.getTask());
        params.put("author", schedule.getAuthor());

        return simpleJdbcInsert.executeAndReturnKey(new MapSqlParameterSource(params)).longValue();
    }

SimpleJdbcInsert ๋Š” JdbcTemplate ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋Š” insert ๊ฐ์ฒด์ด๋‹ค.
๋ณ„๋„์˜ sql ์—†์ด ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๊ณผ ์ปฌ๋Ÿผ ๊ฐ’์„ ์ฃผ๋ฉด ์ž๋™์œผ๋กœ insert ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
usingGeneratedKeyColumns("id") ๋Š” auto_increment ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ‚ค ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด id ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๋Š” executeAndReturnKey() ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์ดํ›„ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด insert ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ์˜ id๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค.


๋ฌธ์ œ ์ƒํ™ฉ

schedule ํ…Œ์ด๋ธ”์€ createDate์™€ lastModifiedDate ์ปฌ๋Ÿผ์— default current_timestamp ์˜ต์…˜์„ ์ค˜์„œ ์ผ์ •์ด ๋“ฑ๋ก๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์ด ์ž…๋ ฅ๋˜๋„๋ก ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ–ˆ๋‹ค.
๋”ฐ๋ผ์„œ java ์ฝ”๋“œ์—์„œ ๋”ฐ๋กœ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ DB๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์ด๋‹ค.

    createDate timestamp default current_timestamp,
    lastModifiedDate timestamp default current_timestamp on update current_timestamp

saveSchedule() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ–ˆ๋‹ค.
์ดํ›„ ํ•ด๋‹น ๊ฐ’์„ ์กฐํšŒํ•˜๋Š”๋ฐ ๋‘ ์ปฌ๋Ÿผ์— null ๊ฐ’์ด ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด๋‹ค...!๐Ÿ˜จ

โ–ฒ createDate, lastModifiedDate ์— null ๊ฐ’์ด ๋“ค์–ด๊ฐ”๋‹ค.

SimpleJdbcInsert ๊ฐ€ ๋ฉ์ฒญํ•˜๊ฒŒ๋„ Schedule ๊ฐ์ฒด์— null ๋กœ ๋“ค์–ด์žˆ๋Š” ํ•„๋“œ๊นŒ์ง€๋„ insert ์ฟผ๋ฆฌ์— ํฌํ•จ์‹œํ‚จ ๊ฒƒ์ด๋‹ค.
๋”ฐ๋ผ์„œ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ createDate=null, lastModifiedDate=null ์ด๋ผ๋Š” ๊ฐ’๊นŒ์ง€ ๋ช…์‹œ์ ์œผ๋กœ insert ๋˜์–ด ๋‚ด๊ฐ€ ์• ์จ ์ง€์ •ํ•ด๋‘” DB์˜ default ๊ฐ’๋“ค์ด null ๋กœ ๋”๋Ÿฝํ˜€์กŒ๋‹ค.


ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

simpleJdbcInsert.withTableName("schedule").usingColumns("password","task","author") //์ปฌ๋Ÿผ์ง€์ • ์ถ”๊ฐ€
                .usingGeneratedKeyColumns("id"); 

ํ•ด๊ฒฐ๋ฒ•์€ ์˜์™ธ๋กœ ๊ฐ„๋‹จํ•œ๋ฐ .usingColumns("password","task","author") ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•  ์ปฌ๋Ÿผ์„ ์ง์ ‘ ์ง€์ •ํ•ด์„œ ์•Œ๋ ค์ฃผ๋ฉด ๋ฉ์ฒญํ•œ SimpleJdbcInsert ๋Š” ํ•ด๋‹น ์ปฌ๋Ÿผ๋งŒ insert ๋ฌธ์— ํฌํ•จ์‹œํ‚จ๋‹ค.

โ–ฒ ์ •์ƒ์ ์œผ๋กœ ์ €์žฅ๋œ ๋ชจ์Šต.

์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์•ˆ ์จ๋„ ๋œ๋‹ค๋Š” ์ ์€ ๋ถ„๋ช… ๋งค๋ ฅ์ ์ด์ง€๋งŒ ์กฐ๊ธˆ์€ ์•„์‰ฌ์šด ๋…€์„์ด๋‹ค.

profile
์ฐจ๊ทผ์ฐจ๊ทผ

0๊ฐœ์˜ ๋Œ“๊ธ€