* 앞의 내용 정리
connection
class.forname() 오라클 드라이버 등록(라이브러리 추가 후 )
DriverMager.getConnection(url, user, password) ->properties 파일로 따로 뺄때는 (user.prop)
preparedStatement 설정
sql문 생성
pstmt = conn.prepareStatement(query);
pstmt.setxxx(1, ____);
sql문 실행(세팅한 쿼리문 실행시키는 코드)
pstmt.executeQuery() = select / 반환값 resultset
pstmt.executeUpdate() = iud / int값(삽입된, 수정된, 삭제된 행의 개수)
: 컬럼에있는 정보들을 각각의 데이터 타입으로 꺼내서 자바의 객체(dto에 설정한 set)에 옮겨주기
MVC
Model :service/ dao
View : 사용자에게 보여지는 화면 , html
Controller
**server - controller, service, dao **
요청과 응답
controller(req.res) //서블릿으로
사용자 요청에 일어난 파라미터를 꺼내서 처리
↑↓
service
transaction 제어가 목적
↑↓
DAO
data, access, object
데이터 쪽에 접근, db와 직접적으로 연결하는 코드를 씀
Service의 역할
1. Connection 생성
2. DAO의 메소드 호출 - 하나일수도 여러개일수도 있음
3. 트랜잭션의 제어(commit, rollback)
: 메소드 호출을 다해서 결과값을 받았을 때 잘 수행되었지 확인해서 commit 또는 rollback 실행
4. Connection 닫기
* 신규 카테고리 등록 후 해당 카테고리 코드를 참조하는 신규 메뉴 등록 기능 작성해보기 *
- 드라이버 등록 템플릿 만들기
- 쿼리문 작성하기
- 카테고리와 메뉴 DTO 작성
Service
public class MenuService {
public void registNewMenu() {
1. Connection 생성
Connection conn = getConnection();
2. DAO 메소드 호출 : 기능에 따라 1번 이상의 호출이 일어날 수 있음
MenuDAO menuDAO = new MenuDAO();
1) 신규 카테고리 등록
CategoryDTO newCategory = new CategoryDTO();
newCategory.setName("기타");
newCategory.setRefCateforyCode(null);
신규 카테고리에 대한 기능 호출
(DAO insertNewCategory메소드에서 사용할 conn, newCategory를 전달해주기)
int result = menuDAO.insertNewCategory(conn, newCategory)
방금 insert 된 마지막 카테고리 번호 조회
int newCategoryCode = menuDAO.slectLastCatetoryCode(conn);
=>조회에 있어서 조건이 없기 때문에 conn만 전달
2) 신규 메뉴 등록
MenuDTO newMenu = new MenuDTO();
newMenu.setName("메롱메롱스튜");
newMenu.setPrice(40000);
newMenu.setCategoryCode(newCategoryCode); 위에서 알아온 카테고리 코드 사용
newMenu.setOrderableStatus("Y");
int result2 = menuDAO.insertNewMenu(conn, newMenu);
3. 트랜잭션 제어
if(result1 > 0 && result2 > 0) {
System.out.println("신규 카테고리와 ㅁㅔ뉴를 추가하였습니다.");
commit(conn);
} else {
System.out.println("신규 카테고리와 메뉴를 추가하지 못했습니다.");
rollback(conn);
}
4. Connection 닫기
close(conn);
}
}
MENU DAO 작성
public class MenuDAO {
prop은 메소드 공통으로 사용되기 때문에 필드에 미리 선언
private Properties prop = new Properties();
1) MenuDAO 생성자에 XML 파일 불러오기
public MenuDAO(){
try {
prop.loadFromXML(new FileInputStream("mapper/menu-query.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
2) 신규 카테고리 등록용 매소드
public int insertNewCategory(Connection conn, CategoryDTO newCategory){
PreparedStatement pstmt = null;
int result = 0;
String query = prop.getProperty("insertCategory");
try{
pstmt = conn.prepareStatement(query);
pstmt.setString(1, newCtegory.getName());
pstmt.setObgeject(2, newCategory.getRefCategoryCode()); 객체이기 때문에 integer가 아닌 obfect로
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
3) 방금 insert 된 마지막 카테고리 번호 조회히기 위한 메소드
public int slectLastCatetoryCode(Connection conn) {
PreparedStatement pstmt = null;
ReseltSet rset = null;
int newCategorycode = 0;
String query = prop.getProperty("getCurrentSequence");
try{
pstmt = conn.prepareStatement(query);
위치홀더가 없으니 바로 실행
rest = pstmt.executeQuery();
if(rset.next()) {
newCategoryCode = rset.getInt("CURRVAL");
=> CURRVAL라는 컬럼을 int 값으로 가져와서 newCategoryCode에 넣음
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
close(rset);
close(pstmt);
}
return newCategoryCode;
}
4) 신규 메뉴 등록을 위한 메소드
public int insertNewMenu(Connection conn, MenuDTO newMenu){
PreparedStatement pstmt = null;
int result = 0;
String query = prop.getProperty("insertMenu");
try {
pstmt = conn.prepareStatement(query);
pstmt.setString(1, newMenu.getName());
pstmt.setInt(2, newMenu.getPrice());
pstmt.setInt(3, newMenu.getCategoryCode());
pstmt.setString(4, newMenu.getOrderableStatus());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
}
'프로그래밍 > JDBC' 카테고리의 다른 글
03 JDBC : PreparedStatement 를 사용하여 insert, update, delete 구문 수행하기 (0) | 2022.08.29 |
---|---|
02 JDBC : Statement 와 PreparedStatement로 QURY 불러오기(SELECT) (0) | 2022.08.26 |
01 JDBC : JDBC 사용 클래스 (0) | 2022.08.26 |