Mary's log 2021. 7. 30. 09:37

※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.


프로젝트 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함수 만들기┐