이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함
비 오는 날 조하❤️
Data Base 의 데이터를 처리하는 Query 문을 실행하기.
Query 문을 실행하기 위해 Connection 은 두 가지 방법을 제공해 준다.
Prepared Statement 는 문장을 컴파일한 후 재사용한다.
때문에 문장이 여러 번 반복될 때 유리하며 성능과 속도 면에서 우수하다.
한번 실행 후 다시 실행되지 않는다면(예 : 최초 table 생성) Statement 가 낫다.
한글 깨짐 방지 코드
<!-- 한글 깨짐 방지 : 특정한 내용이 오면 걸러서 특정한 처리를 해준다. --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 사용할 인코딩 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!-- 강제 인코딩 --> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <!-- 언제(어떠 요청 시) 어떤 필터를 사용할 것인지? --> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1. DB 에 생성할 테이블 샘플 작성
2. stmt 으로 연결되는 'statement 실행' 링크 생성
3. joinForm 으로 연결되는 '회원가입 페이지' 링크 생성
4. list 로 연결되는 '회원 리스트 보기' 링크 생성
5. msg 값이 공백이 아니면 경고창으로 msg 출력
이것은 콘트롤러다(어노테이션)
logger 클래스 객체화
// System.out.println 과 같은 역할
// 어느 클래스에서 발생했는지 알려주고 설정에 따라 파일 저장도 가능하다.
RequestMapping 어노테이션으로 모든 경로로 오는 것을 다 받아주되, get 타입만 받는 것으로 설정
// 특정 uri 로 보낸 요청을 받아주는 받아주는 역할
( 이전 addr(uri-ctx) 역할 + method 지정 역할(get,post방식))
model을 매개변수로 갖는 home 메서드 / 실행문은 콘솔에 "connection 접근 요청이라고" 찍음
HomeService 클래스를 service 로 객체화 해옴
service의 Connect 메서드를 실행하여 Boolean 타입 변수 success 에 담아줌
model 객체를 이용해 result 에 success 값을 담아줌
결과를 home.jsp 로 보냄
stmt 경로로 오는 모든 요청을 받아줌
logger 를 이용해 콘솔에 "stmt 요청" 이라고 출력
일을 처리할 HomeService 클래스를 객체화 해줌
service 객체의 stmt 메서드를 실행하여 msg 변수에 담아줌
logger 를 이용해서 msg 를 찍어줌
값을 home.jsp 로 보냄
joinForm 경로로 오는 것들은 모두 처리해줌
joinForm 메서드는 joinFrom.jsp 로 보내줌
join 경로로 오는 post 타입 method 를 처리해줌
join 메서드는 매개변수로 model과 String 타입의 param 을 받아 실행됨 (model : 데이터를 뷰에 보내기 위해 담는 역할)
logger 로 콘솔에 param 을 찍어줌
HomeService 클래스를 service 로 객체화해옴
service 객체의 join 메서드에 param 을 넣어 실행해서 변수 msg 에 담음
model 객체를 이용해 msg 값을 "msg" 키에 넣어줌
home.jsp 로 보냄
list 경로로 오는 모든 요청을 받아줌
list 메서드는 매개변수 model을 받고 실행됨
logger 를 이용해 "회원 리스트 요청 : "이라고 찍어줌
HomeService 클래스를 service 로 객체화해옴
service 객체의 list 메서드 실행
home.jsp 로 보냄
1. Logger 를 사용할 수 있게 가져옴
2. 멤버변수로 Connection 타입의 conn 변수 선언
3. 생성자에 HomeDAO 메서드 실행
4. InitialContext 를 변수 ctx 로 객체화
5. ctx 의 lookup 메서드를 통해 "java:comp/env/jdbc/MariaDB" 라는 경로를 찾고, 6. DataSource 타입의 변수 ds 에 넣어 datasource 를 담는다.
6. ds 에 getConnection 메서드를 실행해서 변수 conn 에 담는다.
// getConnection : SQLServerDataSource 개체가 나타내는 데이터 원본과의 연결을 설정한다.(연결 설정)
1. Boolean 값을 뱉는 Connect 메서드 실행
2. logger 로 "dao 접근" 콘솔에 출력
3. 변수 success 에 기본적으로 false 를 담음
4. 만약 conn 이 null 이 아니면(sql 과 제대로 연결했다면) sql 변수에 쿼리문을 넣어 준비한다.
5. conn 객체의 createStatement 메서드를 실행해서 변수 stmt 에 담는다.
// 데이터베이스로 SQL 문을 보내기 위한 SQLServerStatement 개체를 만든다.(발송 준비)
// Statement는 실제 sql 을 실행하여 결과값을 준다.
6. stmt 에 executeUpdate를 sql 을 넣어서 실행하고 업데이트 결과값을 int 타입의 변수 row 를 담는다. row 는 변경된 값의 수를 담게 된다.
//executeUpdate : INSERT, UPDATE, MERGE 또는 DELETE 문과 같은 지정된 SQL 문이나 SQL DDL 문같이 아무것도 반환하지 않는 SQL 문을 실행한다.
빡세구만