반응형
● 64일차 코딩학원 수업시간 공부내용정리
1. 프래시맨 뜻 : 신선한 사람. 아직 지성이 없는 상태. 처음에는 '열심히 하겠습니다' 라는 마음으로 시작해야한다.
장화신고 하수구에 들어가서 청소하는 것부터 시작이다. 그런 것들이 쌓여야 나중에 기회가 올 때 점프할 수 있다.
2.Postgresql은 Database에 해당하는 부분이다.
3. src/test/java에서 작업 중
4. jUnit은 디버깅과 비슷해보인다. 테스트를 하는 이유는 책을 쓰고 수정하는 과정과 비슷하다. jUnit테스트를 통해 코드의 오류를 찾거나 수정을 통해 효율적인 코드를 만들 수 있다.
5. 단위테스트가 계속되려면 삭제하고 삽입하고, 삭제하고 삽입하는 과정이 반복되어야한다.
6. 예외처리가 계속 나오네? 왜 예외처리를 해줘야만하는 거지?
7. @Test를 하기위해서 객체를 많이 만든다. 쿼리문이 길어진다. 흐름을 따라가고 있다. 완벽히 이해되지는 않지만 따라치고 있다.
@Test
public void selectUserTest() throws SQLException {
deleteAll();
User user = new User("earth", "0629", "earth", "earth@gmail.com", new Date(), "fb", new Date());
int rowCnt = insertUser(user);
User user2 = selectUser("earth");
assertTrue(user.getId().equals("earth"));
}
private User selectUser(String id) throws SQLException {
Connection cn = ds.getConnection();
String sql = "select * from t_user where id = ?";
PreparedStatement pstmt = cn.prepareStatement(sql);
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
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;
}
}
8. Spring에서 @Test를 진행하면 Postgresql 테이블에 데이터가 추가된다. 각각의 테스트를 하나씩 실행해보면 차이점을 알 수 있다.
package com.earth.tdd;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/**/root-context.xml")
public class DMLTest {
@Autowired
DataSource ds;
@Test
public void springJdbcConnTest() throws SQLException {
Connection cn = ds.getConnection();
System.out.println("cn =" + cn);
assertTrue(cn != null); // 괄호 안의 조건식이 true면 테스트 성공, 아니면 실패
}
@Test
public void insertUserTest() throws SQLException {
User user = new User("earth", "0629", "earth", "earth@naver.com",
new Date(), "youtube", new Date());
deleteAll();
int rowCnt = insertUser(user);
assertTrue(rowCnt == 1);
}
// 사용자 정보를 t_user 테이블에 저장하는 메서드
private int insertUser(User user) throws SQLException {
Connection cn = ds.getConnection();
/*
* 인파라미터에는 물음표를 사용함
* 정확한 값을 나중에 채워주겠다는 의미임
*/
String sql =
"INSERT INTO t_user VALUES(?, ?, ?, ?, ?, ?, now())";
PreparedStatement psmt = cn.prepareStatement(sql);
/*
* 인파라미터 설정시 데이터 타입에 맞는 set메서드를 사용함
* set메서드는 데이터 타입별로 다양하게 준비되어 있음
*/
psmt.setString(1, user.getId());
psmt.setString(2, user.getPwd());
psmt.setString(3, user.getName());
psmt.setString(4, user.getEmail());
psmt.setDate(5, new java.sql.Date(user.getBirth().getTime()));
psmt.setString(6, user.getSns());
int rowCnt = psmt.executeUpdate();
return rowCnt;
}
private void deleteAll() throws SQLException {
Connection cn = ds.getConnection();
String sql = "delete from t_user";
PreparedStatement pstmt = cn.prepareStatement(sql);
pstmt.executeUpdate();
}
@Test
public void selectUserTest() throws SQLException {
deleteAll();
User user = new User("earth", "0629", "earth", "earth@gmail.com", new Date(), "fb", new Date());
int rowCnt = insertUser(user);
User user2 = selectUser("earth");
assertTrue(user2.getId().equals("earth"));
}
private User selectUser(String id) throws SQLException {
Connection cn = ds.getConnection();
String sql = "select * from t_user where id = ?";
PreparedStatement pstmt = cn.prepareStatement(sql);
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
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;
}
@Test
public void deleteUserTest() throws SQLException {
deleteAll();
int rowCnt = deleteUser("earth");
assertTrue(rowCnt == 0);
User user =
new User("earth", "0629", "earth", "earth@gmail.com", new Date(), "fb", new Date());
rowCnt = insertUser(user);
assertTrue(rowCnt == 1);
rowCnt = deleteUser(user.getId());
assertTrue(selectUser(user.getId()) == null);
}
private int deleteUser(String id) throws SQLException {
Connection cn = ds.getConnection();
String sql = "delete from t_user where id = ?";
PreparedStatement pstmt = cn.prepareStatement(sql);
pstmt.setString(1, id);
// int rowCont = pstmt.executeUpdate();
// return rowCont;
return pstmt.executeUpdate();
}
@Test
public void updateUserTest() throws SQLException {
deleteAll();
//사용자 추가
User user =
new User("earth", "0269", "earth", "earth@naver.com", new Date(), "naver", new Date());
int rowCnt = insertUser(user);
assertTrue(rowCnt == 1);
//업데이트 내용. 사용자 정보 수정
user.setPwd("1234");
user.setName("JSH");
user.setEmail("jsh@gmail.com");
assertTrue(rowCnt == 1);
}
private int updateUser(User user) throws SQLException {
Connection cn = ds.getConnection();
String sql = "update t_user "
+ "set pwd = ?, name = ?, email = ?, birth = ?, sns=?, reg_date = ? "
+ "where id = ? ";
PreparedStatement pstmt = cn.prepareStatement(sql);
pstmt.setString(1, user.getPwd());
pstmt.setString(2, user.getName());
pstmt.setString(3, user.getEmail());
pstmt.setDate(4, new java.sql.Date(user.getBirth().getTime()));
pstmt.setString(5, user.getSns());
pstmt.setDate(6, new java.sql.Date(user.getReg_date().getTime()));
pstmt.setString(7, user.getId());
int rowCnt = pstmt.executeUpdate();
return rowCnt;
}
}
반응형