2022_02_13 - oneso123456789/2022 GitHub Wiki

other

๊นจ๋—ํ•œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ 5๊ฐ€์ง€ ํŒ
https://www.youtube.com/watch?v=Jz8Sx1XYb04

1) ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์„ ์จ๋ผ((Use a searchable name.)

๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ํ•œ๋ฒˆ์— ์•Œ์ˆ˜์žˆ๋Š” ์ด๋ฆ„

2) ํ•จ์ˆ˜๋ช…์€ ๋ฐ˜๋“œ์‹œ ๋™์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ(Function name should be verbs.)

EX:์œ ์ €๋ฐ์ดํ„ฐ X ์œ ์ €๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ O
ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด ํ•œ๊ฐ€์ง€ ์•ก์…˜๋งŒ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•จ

3) ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋Š” 3๊ฐœ ์ดํ•˜๊ฐ€ ์ ๋‹นํ•จ

๋งŒ์•ฝ ์–ด์ฉ”์ˆ˜์—†์ด ๋งŽ์€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด configuration object๋กœ ์ •๋ฆฌํ•ด์„œ parm์‚ฌ์šฉํ•˜๊ธฐ

4) boolean ๊ฐ’์„ ์ธ์ˆ˜๋กœ ๋ณด๋‚ด๋Š”๊ฑธ ์ตœ๋Œ€ํ•œ ๋ฐฉ์ง€

์ถ”์ฒœํ•˜๋Š”๊ฒƒ์€ ๊ฐ๊ฐ์˜ if-else ๊ฐ’์„ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒƒ์ž„

5) ์งง์€ ๋ณ€์ˆ˜๋ช…์ด๋‚˜ (์•„๋ฌด๋„ ์ดํ•ด๋ชปํ•˜๋Š”)์ถ•์•ฝ์–ด ์“ฐ๋Š” ๊ฒƒ์„ ํ”ผํ•˜์ž

ex:e X email O

์ฃผ์˜

๋ฒˆ์™ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ์ฝ”๋”ฉ ์ดˆ๋ฐ˜๋ถ€์—๋Š” ์šฐ์„  ๋™์ž‘๊ณผ ์ž‘๋™์— ์ดˆ์ ์„ ๋งž์ถฐ์„œ ์ž‘์—…
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ํ›„ ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋”ฉ์ •๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์ข‹์Œ

์˜์†์˜์—ญ์˜ CRUD ๊ตฌํ˜„

์›น ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์—์„œ ๋งˆ์ง€๋ง‰ ์˜์—ญ์ด ์˜์†์˜์—ญ์ด์ง€๋งŒ,
์‹ค์ œ๋กœ ๊ตฌํ˜„์„ ๊ฐ€์žฅ ๋จผ์ € ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ๋„ ์˜์† ์˜์—ญ์ž„.
์˜์† ์˜์—ญ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ CRUD ์ž‘์—…์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ”๊ณผ VO(DTO) ๋“ฑ ์•ฝ๊ฐ„์˜
์ค€๋น„๋งŒ์œผ๋กœ๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ CRUD ์ž‘์—…์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ

MyBatis๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ JDBC์˜ PreparedStatement๋ฅผ ํ™œ์šฉํ•˜๊ณ  ํ•„์š”ํ•œ
ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” '?'์— ๋Œ€ํ•œ ์น˜ํ™˜์€ #{์†์„ฑ}์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•จ

create(insert)์ฒ˜๋ฆฌ

tbl_board ํ…Œ์ด๋ธ”์€ PK ์นผ๋Ÿผ์œผ๋กœ bno๋ฅผ ์ด์šฉํ•˜๊ณ ,
์‹œํ€€์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ๋ฒˆํ˜ธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐฉ์‹ ์‚ฌ์šฉ

์ด์ฒ˜๋Ÿผ ์ž๋™์œผ๋กœ PK๊ฐ’์ด ์ •ํ•ด์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ

  • insert๋งŒ ์ฒ˜๋ฆฌ๋˜๊ณ  ์ƒ์„ฑ๋œ PK ๊ฐ’์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
  • insert๋ฌธ์ด ์‹คํ–‰๋˜๊ณ  ์ƒ์„ฑ๋œ pk ๊ฐ’์„ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

BoardMapper ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ์œ„์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ

BoardMapper.interface ์ฝ”๋“œ์ถ”๊ฐ€

public interface BoardMapper {

// mapper.xml์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์ฃผ์„์ฒ˜๋ฆฌ    @Select("select * from tbl_board where bno > 0")
    public List<BoardVO> getList();

    public void insert(BoardVO board);

    public void insertSelectKey(BoardVO board);

}

BoardMapper.xml ์ฝ”๋“œ ์ถ”๊ฐ€

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.crow.mapper.BoardMapper">


<select id="getList" resultType="com.crow.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>

<insert id="insert">
    insert into tbl_board(bno,title,content,writer)
    values(seq_board.nextval, #{title}, #{content}, #{writer})
</insert>

<insert id="insertSelectKey">

    <selectKey keyProperty="bno" order="BEFORE" resultType="long">
        select seq_board.nextval from dual
    </selectKey>
    
    insert into tbl_board(bno,title,content,writer)
    values(#{bno}, #{title}, #{content}, #{writer})
</insert>

</mapper>

BoardMapper์˜ insert()๋Š” ๋‹จ์ˆœํžˆ ์‹œํ€€์Šค์˜ ๋‹ค์Œ ๊ฐ’์„ ๊ตฌํ•ด์„œ insertํ• ๋•Œ ์‚ฌ์šฉํ•จ
insert๋ฌธ์€ ๋ช‡ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ์„ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ์˜ PK ๊ฐ’์„ ์•Œ์ˆ˜๋Š” ์—†์ง€๋งŒ,
1๋ฒˆ์˜ SQL ์ฒ˜๋ฆฌ๋งŒ์œผ๋กœ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์žฅ์ ์ด ์žˆ์Œ

insertSelectKey()๋Š” @SelectKey๋ผ๋Š” MyBatis์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•จ
@SelectKey๋Š” ์ฃผ๋กœ PK ๊ฐ’์„ ๋ฏธ๋ฆฌ(before) SQL์„ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•ด ๋‘๊ณ  ํŠน์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ฐฉ์‹์ž„
@Insert ํ•  ๋•Œ SQL๋ฌธ์„ ๋ณด๋ฉด #{bno}์™€ ๊ฐ™์ด ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

์šฐ์„  insert()์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ src/test/java ๋‚ด์— BoardMapperTests ํด๋ž˜์Šค์—
์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ

BoardMapperTests ํด๋ž˜์Šค ์ผ๋ถ€

    @Test
    public void testInsert() {
        BoardVO board = new BoardVO();
        board.setTitle("testInsert๋ฌธ ์ œ๋ชฉ์ด๋ผ๊ตฌ");
        board.setContent("testInsert๋ฌธ ๋‚ด์šฉ์ด๋ผ๊ตฌ");
        board.setWriter("testInsert๋ฌธ ์ž‘์„ฑ์ž๋ผ๊ตฌ");

        mapper.insert(board);

        log.info(board);
    }

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ log.info(board)๋ฅผ ์ž‘์„ฑํ•œ ์ด์œ ๋Š” Lombok์ด ๋งŒ๋“ค์–ด์ฃผ๋Š” toString()์„ ์ด์šฉํ•ด์„œ
bno ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)์˜ ๊ฐ’์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•จ์ž„

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์˜ ๋งˆ์ง€๋ง‰์„ ์‚ดํŽด๋ณด๋ฉด BoardVO ํด๋ž˜์Šค์˜ toString()์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ,
bno์˜ ๊ฐ’์ด null๋กœ ๋น„์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

@SelectKey๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ

BoardMapperTests ํด๋ž˜์Šค์˜ ์ผ๋ถ€

    @Test
    public void testInsertSelectKey() {
        BoardVO board = new BoardVO();
        board.setTitle("์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ธ€ select key");
        board.setContent("์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋‚ด์šฉ select key");
        board.setWriter("์ƒˆ๋กœ์ž‘์„ฑํ•˜๋Š” ์ด์šฉ์ž");
        
        mapper.insertSelectKey(board);
        
        log.info(board);
        
    }

์‹คํ–‰๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด'select seq_board.nextval from dual`๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ 
์—ฌ๊ธฐ์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•ด์„œ bno ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ
BoardMapper์˜ insertSelectKey() @Insert ๋ฌธ์˜ SQL์„ ๋ณด๋ฉด
'insert into tbl_board(bno,title,content,writer) values(#{bno},$#{title},#{content},#{writer})'์™€ ๊ฐ™์ด
ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋˜๋Š” BoardVO์˜ bno ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด ์žˆ์Œ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์„ ๋ณด๋ฉด BoardVO ๊ฐ์ฒด์˜ bno ๊ฐ’์ด ์ด์ „๊ณผ ๋‹ฌ๋ฆฌ ์ง€์ •๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ
(์‹œํ€€์Šค์˜ ๊ฐ’์ด ํ˜„์žฌ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์ด ๋‚˜์˜ด, ์‹œํ€€์Šค ๊ฐ’์€ ์ค‘๋ณต ์—†๋Š” ๊ฐ’์„ ์œ„ํ•œ ๊ฒƒ์ผ ๋ฟ ๋‹ค๋ฅธ ์˜๋ฏธ๊ฐ€ ์—†์Œ)
@SelectKey๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์€ SQL์„ ํ•œ ๋ฒˆ ๋” ์‹คํ–‰ํ•˜๋Š” ๋ถ€๋‹ด์ด ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š”
PK๊ฐ’์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ