Spring/spring_old
07./ Spring Web MVC-DB연계-jdbc template
slow333
2023. 1. 13. 22:42
repository에서 jdbcMemberRepository를 JdbcTemplateMemberRepository로 변경
짧으니까 보면서 하던지 외우던지 해야 할듯...
public class JdbcTemplateMemberRepository implements MemberRepository{
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public Long save(Member member) throws ClassNotFoundException {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
return member.getId();
}
@Override
public Optional<Member> findById(Long id) {
List<Member> members = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
return members.stream().findAny();
}
@Override
public Optional<Member> findByName(String name) {
List<Member> members = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
return members.stream().findAny();
}
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member", memberRowMapper());
}
private RowMapper<Member> memberRowMapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
member.setRegDate(rs.getDate("regdate"));
return member;
};
}
}
@Configuration 변경
@Bean
public MemberRepository memberRepository(){
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
@Test
Spring test를 위해서는
@SpringBootTest와 @Transactional을 해 주어야함
==> Transational을 해주어야 개별 시험 후 원복(rollback)해서 시험이 정상으로 수행됨
개별 시험하는 것도 나뿐 방법은 아님
@SpringBootTest
@Transactional
class MemberServiceSpringTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository ;
@Test
void join() throws ClassNotFoundException {
//given
Member member = new Member();
member.setId(null);
member.setName("5644asdf-OK");
member.setRegDate(null);
memberService.join(member);
//
// Member byId = memberService.findId(joinId).get();
// assertThat(byId.getName()).isEqualTo(member.getName());
}
@Test
void checkDuplicateMember() throws ClassNotFoundException {
Member member = new Member();
member.setName("sp1dfs");
member.setRegDate(new Date());
Member member2 = new Member();
member2.setName("sp1asf");
member2.setRegDate(new Date());
memberService.join(member);
IllegalStateException e = Assertions.assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 회원이 있습니다.");
}
@Test
void findMembers() throws ClassNotFoundException {
Member member = new Member();
member.setName("sp1asasf");
member.setRegDate(new Date());
memberService.join(member);
Member member1 = new Member();
member1.setName("sp2789g");
member1.setRegDate(new Date());
memberService.join(member1);
List<Member> members = memberService.findMembers();
System.out.println(members);
}
@Test
void findId() {
}
}