※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.
프로젝트 JDBC_VER_2
어제 Service클래스의 delete함수까지 만들고,
오늘 DAO클래스의 delete함수부터 만들기 시작
사용자 → Service → DAccessO → 모델클래스/ DTranserO
↖___ Service ← DAccessO ←──┘
Test,main → Service → DAccessO → Dept/ DTranserO
↖___ Service ← DAccessO ←──┘
<Main 클래스 = 사용자 >
(레코드)가 있는 객체를 생성하고, 변수라는 이름으로 이용.
try { 완충제 serive클래스.함수 호출
} catch ( ) {
Exception 클래스의 함수 호출
}
<Service 클래스 = 커플링 완충제 >
멤버변수 = 1. 4가지 정보 ,
OracleTxDAO dao; //★DAO클래스를 끌어올 dao변수선언&자동초기화★
함수 = 함수명 {
2.드라이버생성-Connection 선언,
try { 3. 컨넥션 연결, //Connection 사용
dao클래스.함수 호출
} catch { }
finally { }
< DAccessO 클래스 >
함수 =함수명 [throws RecordExp 반드시 써야하는 함수면 쓰기]{
2. 드라이버생성-PreparedStatement 선언,
try { 4. sql 작성 - insert,delete,update sql 작성
5. sql 실행 //PreparedStatement 사용
6. 실행하고 결과값받기
} catch { }
finally { }
< Dept 클래스> = 모델클래스라고도 함
developer에 있는 값들을 가져 올 수 있게
멤버변수랑 멤버함수 있는 클래스.
//멤버변수선언, 기본생성자,전체생성자, 겟셋함수, toString함수
==모델클래스 작성 시, [멤버변수명]과 [테이블 컬럼명]을 꼭 일치시키기(일치안시켜도 되지만 나중에 오류발생할수도)
< ㅇㅇException 클래스←모든 함수들이 끌어쓸 수 있게 >
꼭 클래스 다음에 " extends Exception " 추가해야함!!!!!!!!!!!!!
public RecordNotFoundException extends Exception {
super(message);
}
프로젝트 JDBC_VER_TX_3 생성
OracleTXMain2 클래스 복붙생성
//tx처리: insert와 delete 작업을 동시에 할 수 있게 하나의 함수에 묶어줄거임.
// Exceotion이 터지면, insert+delete하기 전으로 rollback.
// Exceotion이 안 터지면, insert+delete하고 나서 commit.
//con.setAutoCommit(boolean)라는 함수가 있음.
//con.setAutoCommit(true) = 자동commit시작. 이게 기본값으로 되어있음
//con.setAutoCommit(false) = 자동commit안함.
<Service 클래스 = 커플링 완충제 >
멤버변수 = 1. 4가지 정보 ;
OracleTxDAO dao; //DAO클래스를 끌어올 dao변수선언&자동초기화
함수 = 함수명 {
2.드라이버생성-Connection 선언 ;
try { 3. 컨넥션 연결 ; //Connection 사용
dao클래스.함수 호출 ;
} catch { }
finally { }
< DAccessO 클래스 >
함수 =함수명 [throws RecordExp 반드시 써야하는 함수면 쓰기]{
2. 드라이버생성-PreparedStatement 선언 ;
try { 4. sql 작성 - insert,delete,update sql 작성
5. sql 실행 //PreparedStatement 사용
6. 실행하고 결과값받기
} catch { }
finally { }
★초반엔, Main에서 service함수 호출===>Service에서 dao함수 호출===>DAO 도달
이거 자동완성으로 하지 말고 직접 전부 적도록 해보기
사용자 → Service → DAccessO → 모델클래스/ DTranserO
↖___ Service ← DAccessO ←──┘
Test,main → Service → DAccessO → Dept/ DTranserO
↖___ Service ← DAccessO ←──┘
트랜잭션 복습할 때,
dao.insert(con, dept); // 위에 매개변수 앞의 dept객체를 insert함수에 넣어주고
dao.delete(con, i); // 위에 매개변수 뒤의 deptno를 delete함수에 넣어주고
// 88번 삭제 시 exception발생. 삭제레코드가 0인 경우는 exception이 아님
이것만 가지고 다시 insertDelete 함수 써보기
가급적 DAO는 sql 쓰고,
되도록 Service에서 하자고 했는데 Service도 너저분....
service의 trycatch를 사라지게 만들고 Template를 만들어보자.
프로젝트 EmpJDBCTest 생성
★★★★★프로젝트를 새로 만들 때 마다,★★★★★
Build Path - Libraries -Add External JARs... - 위의 폴더에 저장해놨던, 드라이버파일을 끌어옴.
★★★★★★★★★★★★★★★★★★★★★★★
사용자 → Service → DAccessO → 모델클래스/ DTranserO
↖___ Service ← DAccessO ←──┘
Test,main → JdbcTemplate → Biz → DAccessO → EmpDTO
↖___ JdbcTemplate → Biz ← DAccessO ←──┘
Emp의 데이터를 담을거 클래스 : EmpDTO
Main이 끌어다가 사용할 클래스 : Biz
Biz가 끌어다가 사용할 클래스 : DAO
-중간에 JdbcTemplate은,
[ 드라이버 연결
컨넥션 연결
컨넥션 닫아주는거 ]
+
[ commit 까지 ]
-JdbcTemplate 클래스를 만들었지만
Biz 클래스에서 JdbcTemplate를 쓸때 패키지import 되어있는게 아니고
그냥 바로 쓰인거 보니,
JdbcTemplate에 static이 되어있는거임
< Main 클래스 EmpTest >
//꼭 main 함수 끝에 " throws DataNotFoundException " 적기!!!!!!!!!!!!!
EmpBiz empBiz = new EmpBiz(); //EmpBiz는 EmpDAO 사용할거고,
try { 완충제 serive클래스.함수 호출
} catch ( ) {
Exception 클래스의 함수 호출
}
<Service 클래스 = 커플링 완충제 =Biz >
< DAccessO 클래스 EmpDAO >
함수생성 : public ArrayList<EmpDTO> selectALLEmp(Connection con) {
< DTO 클래스 EmpDTO > = 모델클래스라고도 함
developer에 있는 값들을 가져 올 수 있게
멤버변수랑 멤버 함수 있는 클래스.
==모델클래스 작성 시, [멤버변수명]과 [테이블 컬럼명]을 일치시키기
< ㅇㅇException 클래스 ←모든 함수들이 끌어쓸 수 있게 >
꼭 클래스 다음에 " extends Exception " 추가해야함!!!!!!!!!!!!!
public class DataNotFoundException extends Exception {
super(message);
}
< JdbcTemplate 클래스 >
아까 생성없이 static 쓸거라고 했으니까, 1.4가지 정보에 전부 public static을 붙임.
public static String driver = "oracle.jdbc.driver.OracleDriver";
public static String url = "jdbc:oracle:thin:@localhost:1521:XE";
public static String userid = "scott";
public static String passwd = "tiger";
// 2.드라이버로딩 하는 생성자
// 3.컨넥션 연결 하는 함수
// 지금까지 connection이 not null이면 close했는데, 좀더 디테일하게,
// 매개변수로 conn을 넘겨받고,
// 변수 validConnection 생성 후, true로 초기화.
// 만약 [conn==null이거나 isClosed()]=[커넥션 연결 실패]니까, valid=false초기화.
// conn을 못찾는 예외가 뜨면, 어쨌든 연결이 안된거니까 valid=false초기화하고 예외상세히
// if문 조건이 아니라는건=[커넥션 연결 성공]
// 최종적으로, connection 검사를 하고, 맞으면 연결, 아니면 Exception하겠다는
// isConnected(Connection conn) 함수
// 함수 close(Connection conn)
// 함수 close(Statement stmt)
// 함수 close(ResultSet rset)
//지금까지의 트랜잭션을 Commit한다는 함수
//지금까지의 트랜잭션을 rollback한다는 함수
여기까지 < JdbcTemplate 클래스 >
ㄴ//import java.sql.*; //이렇게 쓰면 java.sql의 모든 유틸리티를 임포트 하지만, 권장하진 않음
현재 나의 의문점..
1. 드라이버로딩하는 Template의 생성자는 대체 어디에 쓰였는가?
===>Template 없을 땐, 그냥 Service,DAO클래스의 내용에
JDBC의 (4가지정보, 드라이버연결,커넥션연결,자원반납,commit)을 전부 적었음. 그랬더니 정신없고 코드가 많은거야!!!!
그래서 Template클래스에
JDBC의 (4가지 정보,드라이버연결,커넥션연결,자원반납,commit)를 다 빼둔거임.
2.
===>멤버변수는 선언만 하고 초기화 안해도 됨.
EmpDAO dao; 는 모든 함수들 안에서 변수로 쓰일 수 있게, 변수 선언만 되고 가만히 있음
그냥 함수 안에 매번 EmpDAO dao=new EmpDAO() ; 라고 선언&초기화(객체생성) 까지 다 해줘도 됨.
3.
throws Exception을 써야하는건, 언제 쓰고 언제 안 쓰는가...
┌selectDetailEmp2함수 만들기┐
'Govern > JDBC, mybatis, Eclipse EE' 카테고리의 다른 글
08-03(화) 2.Mapper에 selectByHashMap만들기 (0) | 2021.08.03 |
---|---|
08-03(화) 1. Mapper에 insert, delete, update 만들기 (0) | 2021.08.03 |
08-02(월) (0) | 2021.08.02 |
08-02(월) mybatis (0) | 2021.08.02 |
07-28(수) JDBC, mybatis 넣는 방법 (0) | 2021.07.28 |