spring으로 DB다루기 -TDD
//사용자 정보를 user_info 테이블에 저장하는 메서드
public int insertUser(User user) throws Exception {
Connection conn = ds.getConnection(); // 데이터 소스로부터 데이터베이스를 가져옴
// sql에 작성해놓은 인포와 값. 순서가 일치해야 한다.
// insert into user_info (id, pwd, name, email, birth, sns, reg_date)
// values ('asdf22','1234','윤세라','aaa@aaa.com','2022-02-02','instagram',now());
String sql="insert into user_info values (?,?,?,?,?,?,now()) "; //sql문 작성
PreparedStatement pstat = conn.prepareStatement(sql); // 각 ? 부분에 해당하는 값 채우기
pstat.setString(1, user.getId());
pstat.setString(2, user.getPwd());
pstat.setString(3, user.getName());
pstat.setString(4, user.getEmail());
pstat.setDate(5, new java.sql.Date(user.getBirth().getTime()));
pstat.setString(6, user.getSns());
int rowCnt = pstat.executeUpdate(); // sQl문 실행 insert, delete, update에 executeUpdate사용.
return rowCnt; // 결과를 rowcount로 받음.
}
👇위에 대한 테스트 코드 실행
@Test
public void insertUserTest() throws Exception{
User user = new User("asdd","1234","졸려요","aaa@aaaa.com", new Date(), "insta", new Date());
int rowCnt = insertUser(user);
assertTrue(rowCnt==1); // 결과값이 1이 나오면 true가 되어 통과
}
* 돌렸더니 에러문장이 Duplicate entry 'asdf' 로 나와서 'asdd'로 값을 변경해서 돌리고 해결! 이미 입력되어있는 값이라 중복값에러가 뜬거였음.
👉 테스트 할 때마다 키값이 중복되지 않도록 설정할 수 없으므로 delete메서드를 추가해서 자료가 삭제된 후 테스트 할 수 있도록 한다.
deleteAll(); // user_Info 테이블에 있는 모든 데이터를 지우는 메서드
private void deleteAll() throws Exception {
Connection conn = ds.getConnection(); // 데이터 소스로부터 데이터베이스를 가져옴
String sql="delete from user_info"; //자료 삭제
PreparedStatement pstat = conn.prepareStatement(sql); // 각 부분에 해당하는 값 채우기
pstat.executeUpdate(); // sQl문 실행 insert, delete, update에 executeUpdate사용.
}
테이블에서 값을 가져와 조회하는 메서드
@Test
public void selectUserTest() throws Exception{
// 아이디가 있을지 없을지 모르므로 delete 후 insert를 해서 테스트를 해야 하므로 메서드 추가.
deleteAll();
// insert
User user = new User("asdd","1234","졸려요","aaa@aaaa.com", new Date(), "insta", new Date());
int rowCnt = insertUser(user);
User user2= selectUser("asdd");
assertTrue(user.getId().equals("asdd")); //위에서 조회한 아이디가 결과값이랑 같아야 true 반환
}
public User selectUser(String id) throws Exception { // 매개변수를 id로 하여 사용자 정보를 가져오는 메서드
Connection conn = ds.getConnection(); // 데이터 소스로부터 데이터베이스를 가져옴
String sql="select * from user_info where id=?"; //자료 삭제
PreparedStatement pstmt = conn.prepareStatement(sql); // 각 부분에 해당하는 값 채우기
pstmt.setString(1,id);
ResultSet rs= pstmt.executeQuery(); // sQl문 실행 insert, delete, update에 executeUpdate사용.
if(rs.next()){ //rs다음에 값이 있을때 아래내용 실행
User user = new User();
user.setId(rs.getString(1));
user.setPwd(rs.getString(2));
user.setName(rs.getString(3));
user.setEmail(rs.getString(4));
user.setBirth(new Date(rs.getDate(5).getTime()));
user.setSns(rs.getString(6));
user.setReg_date(new Date(rs.getTimestamp(7).getTime()));
return user; // 결과가있으면 값을 채워서 반환
}
return null; // 결과가 없으면 널값 반환
}
👉 여러번 테스트를 해도 성공하도록 테스트코드를 작성해야 한다.
👉 DataSource에 있는 인스턴스변수 ds는 메서드들과 공유될 것 같지만, 테스트 코드의 경우 별도의 객체로 실행되도록 되어있기 때문에 ds를 공유하지 않는다.
'🔥 Vamos > Spring' 카테고리의 다른 글
0204 | 스프링의 정석 :: 3-15 (DAO) (0) | 2023.02.05 |
---|---|
0203 | 스프링의 정석 :: SQL 문법 오류 (0) | 2023.02.04 |
0124 | 스프링의 정석 :: 3-13 (JDBC와 JUnit Test Framework) (0) | 2023.01.24 |
0123 | 스프링의 정석 :: 3-9~3-12 (MySQL워크벤치 접속과 사용법) (0) | 2023.01.24 |
0121 | 스프링의 정석 :: 3-8(SPRING DI 이론 4) (0) | 2023.01.21 |