728x90
이전 글 참고 필수 ✨
[JDBC] DAO 패턴 및 DTO 패턴
데이터베이스를 연동하는 프로그램을 개발할 때 반드시 사용되는 2가지 개발 패턴이 있다. DAO (Data Access Object) 패턴 DB의 데이터에 접근하기 위한 객체로, 직접 DB에 접근하여 데이터를 조회, 삽입
gangintheremark.tistory.com
dept 테이블에 저장된 레코드를 조회, 검색, 수정, 삭제할 수 있는 기능을 DAO 및 DTO 패턴을 적용하여 구현한 실습이다.
- Main 클래스명 : DeptMain.java
- DAO 클래스명 : DeptDAO.java
- DTO 클래스명 : DeptDTO.java
- Service 인터페이스명 : DeptService.java
- Service 클래스명 : DeptServiceImpl.java
DTO
dept 테이블의 레코드 저장 및 다른 클래스로 전달하는 용도
package com.dto;
public class DeptDTO {
int deptno; // deptno 컬럼 저장
String dname; // dname 컬럼 저장
String loc; // loc 컬럼 저장
public DeptDTO(int deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return deptno+"\t"+dname+"\t"+loc;
}
}
Service
오라클 데이터베이스와 연결하기 위해 Connection을 얻는 작업을 하기 위한 Service 클래스를 작성한다. 각각의 기능에 대해 DeptService 인터페이스에 추상 메소드를 정의하고 DeptServiceImpl클래스에서 implements 키워드를 사용해 지정하고 오버라이딩 하여 구현하였다.
// DeptService 인터페이스
package com.service;
import java.util.List;
import com.dto.DeptDTO;
public interface DeptService {
public List<DeptDTO> select();
public int insert(DeptDTO dto);
public int update(DeptDTO dto);
public int delete(int deptno);
}
// *************************
// DeptServiceImpl 클래스
package com.service;
import java.util.List;
import java.sql.*;
import com.dao.DeptDAO;
import com.dto.DeptDTO;
public class DeptServiceImpl implements DeptService {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String userid = "SCOTT";
String passwd = "TIGER";
public DeptServiceImpl() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// select 기능 메서드
@Override
public List<DeptDTO> select() {
List<DeptDTO> list = null;
Connection con = null;
try {
con = DriverManager.getConnection(url, userid, passwd);
// DAO 접근
DeptDAO dao = new DeptDAO();
list = dao.select(con);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
// insert 기능 메서드
@Override
public int insert(DeptDTO dto) {
int n = 0;
Connection con = null;
try {
con = DriverManager.getConnection(url, userid, passwd);
// DAO 연동
DeptDAO dao = new DeptDAO();
n = dao.insert(con, dto);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (con != null)
con.close(); // Connection은 Service 클래스에서 close
} catch (SQLException e) {
e.printStackTrace();
}
}
return n;
}
// update 기능 메서드
@Override
public int update(DeptDTO dto) {
int n = 0;
Connection con = null;
try {
con = DriverManager.getConnection(url, userid, passwd);
// DAO 연동
DeptDAO dao = new DeptDAO();
n = dao.update(con, dto);
} catch (SQLException e) {
e.printStackTrace();
}
return n;
}
// delete 기능메서드
@Override
public int delete(int deptno) {
int n = 0;
Connection con = null;
try {
con = DriverManager.getConnection(url, userid, passwd);
// DAO 연동
DeptDAO dao = new DeptDAO();
n = dao.delete(con, deptno);
} catch (SQLException e) {
e.printStackTrace();
}
return n;
}
}
DAO
실제 데이터베이스와 연동하는 DeptDAO 클래스이다. dept 테이블의 하나의 레코드는 DeptDTO에 저장하고 누적하기 위해 ArrayList<DeptDTO>
를 사용한다.
package com.dao;
import java.sql.*;
import java.util.*;
import com.dto.DeptDTO;
import com.exception.DuplicatedDeptnoException;
// Oracle 의 dept테이블 연동하는 클래스
public class DeptDAO {
// select 기능 메서드
public List<DeptDTO> select(Connection con) {
List<DeptDTO> list = new ArrayList<DeptDTO>();
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String sql = "select deptno, dname, loc from dept";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
DeptDTO dto = new DeptDTO(deptno, dname, loc);
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
// insert 기능 메서드
public int insert(Connection con, DeptDTO dto) {
PreparedStatement pstmt = null;
int num = 0;
try {
String sql = "insert into dept (deptno, dname,loc) " + " values (?, ?, ?)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, dto.getDeptno());
pstmt.setString(2, dto.getDname());
pstmt.setString(3, dto.getLoc());
num = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return num;
}
// update 기능 메서드
public int update(Connection con, DeptDTO dto) {
PreparedStatement pstmt = null;
int num = 0;
try {
String sql = "update dept set dname=?, loc=? where deptno=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(3, dto.getDeptno());
pstmt.setString(1, dto.getDname());
pstmt.setString(2, dto.getLoc());
num = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return 0;
}
// delete 기능 메서드
public int delete(Connection con, int deptno) {
PreparedStatement pstmt = null;
int num = 0;
try {
String sql = "delete from dept where deptno = " + deptno;
pstmt = con.prepareStatement(sql);
num = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return num;
}
}
728x90
'Framework & Library > JDBC' 카테고리의 다른 글
[JDBC] JDBC 트랜잭션 처리 (0) | 2023.08.03 |
---|---|
[JDBC] DAO 패턴 및 DTO 패턴 (0) | 2023.08.02 |
[JDBC] INSERT문/UPDATE문/DELETE문 요청 (0) | 2023.08.01 |
[JDBC] JDBC 실행 순서 정리 ✍️ - SELECT문 요청 (0) | 2023.08.01 |