Hello Repositoty

Sol's·2023년 6월 5일
0

토비의 스프링 부트

목록 보기
30/31

Hello Repositoty를 만들어 JDBC를 사용해 DB에 값을 넣어보고 테스트까지 해보겠습니다.

Repositoy

간단하게 3개의 기능을 하는 조회를 만들어 보겠습니다.
countOf는 디폴트 메서드입니다!

findHello : 이름을 기준으로 조회
increaseCount : 객체의 Count를 1개 증가
countOf : Count를 확인

public interface HelloRepository {
    Hello findHello(String name);

    void increaseCount(String name);

    default int countOf(String name) {
        Hello hello = findHello(name);
        return hello == null ? 0 : hello.getCount();
    }
}

Repositoy 구현체

JDBC를 사용해 쿼리를 작성했습니다.

  • queryForObject를 사용하여 rowMapper인터페이스를 람다식과 같이 활용하여 조회한 값을 Hello객체로 만들어 반환하였습니다.
    ResultSet : 조회 데이터가 담겨있습니다.
    rowNum : 말 그대로 행의 갯수입니다.
@Repository
public class HelloRepositoryJdbc implements HelloRepository{
    private final JdbcTemplate jdbcTemplate;

    public HelloRepositoryJdbc(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public Hello findHello(String name) {
        try {
            return jdbcTemplate.queryForObject("select * from hello where name = '" + name + "'",
                    (rs, rowNum) -> new Hello(
                            rs.getString("name"), rs.getInt("count")
                    ));
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public void increaseCount(String name) {
        Hello hello = findHello(name);
        if (hello == null) jdbcTemplate.update("insert into hello values (?, ?)", name, 1);
        else jdbcTemplate.update("update hello set count = ? where name = ?", hello.getCount() + 1, name);

    }
}

Test

기존에 했던 테스트와 같이 실행하였습니다!

@HellobootTest
public class HellowReposirotyTest {

    @Autowired
    JdbcTemplate jdbcTemplate;
    @Autowired
    HelloRepository helloRepository;

    @BeforeEach
    void init(){
        // 테이블 생성
        jdbcTemplate.execute("create table if not exists hello(name varchar(50) primary key, count int)");
    }
    @Test
    void findHelloFailed() {
        assertThat(helloRepository.findHello("Toby")).isNull();
    }

    @Test
    void increaseCount() {
        assertThat(helloRepository.countOf("Toby")).isEqualTo(0);

        helloRepository.increaseCount("Toby");
        assertThat(helloRepository.countOf("Toby")).isEqualTo(1);

        helloRepository.increaseCount("Toby");
        assertThat(helloRepository.countOf("Toby")).isEqualTo(2);
    }
}

기능들이 잘 작동하는것을 확인하였습니다!

profile
배우고, 생각하고, 행동해라

0개의 댓글