현재 배운 것을 바탕으로 RUN ▶ VIEW ▶ SERVICE ▶ DAO 순서로 작성해보려고 한다.
더불어, XMLFILE을 생성하는 Class를 만들어서 .xml 파일을 만들고 sql내용을 작성한 후 이를 연결하여 실행해보려고 한다.
그 전에 개념을 먼저 알아본 후 JDBCTemplate 클래스를 만들어보자!👩🏫
DB 연결 (Connection 생성)+ 자동 커밋 off , JDBC 객체 자원 반환(close)
과 같은 트랜잭션 제어를 JDBC에서 반복 사용되는 코드를 모아둔 클래스를 말한다.
[특징]
모든 필드, 메서드가 static 이다.
➡ 어디서든지 클래스명.필드명 / 클래스명.메서드명 호출 가능하고,
➡ 별도 객체 생성하지 않아도 된다.👍
private static Connection conn = null;
📑 DB 연결 정보를 담고있는 Connection 객체 생성 및 반환 메서드
// @return conn
public static Connection getConnection() {
try {
// ✔ 현재 커넥션 객체가 없을 경우 ▷ 새 커넥션 객체 생성하라는 조건문
if(conn == null || conn.isClosed()) {
// conn.isClosed() : 커넥션이 close 상태면 true 반환
Properties prop = new Properties();
// Map<String,String> 형태의 객체, XML 입출력 특화
// ✔ driver.xml 파일 읽어오기
prop.loadFromXML(new FileInputStream("driver.xml"));
//▷ xml 파일에 작성된 내용이 Properties 객체에 모두 저장됨.
// ✔ XML에서 읽어온 값을 모두 변수에 저장하기
String driver = prop.getProperty("driver");
String url =prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");
// ✔ 커넥션 생성하기
Class.forName(driver); //Oracle JDBC Driver 객체 메모리 로드
// DriverManager 통해 Connection 객체 생성하기
conn = DriverManager.getConnection(url,user,password);
// + 자동 커밋 비활성화하기
conn.setAutoCommit(false);
}
} catch (Exception e) {
System.out.println("[Connection 생성 중 예외 발생]");
e.printStackTrace();
}
return conn; //▷ 생성 및 설정된 Connection 객체 반환 하기
}
📑 Connection 객체를 자원 반환 메서드
// @param conn
public static void close(Connection conn) {
try {
/*
✔ 전달 받은 conn이 참조하는 Connection 객체가 있고,
그 Connection 객체가 close 상태가 아니라면 자원반환하라는 조건문
*/
if(conn != null && !conn.isClosed()) conn.close(); //▷ 자원반환!
} catch (Exception e) {
e.printStackTrace();
}
}
📑 Statement(부모), PreparedStatement(자식) 객체 자원 반환 메서드
// @param stmt
public static void close(Statement stmt) {
try {
if(stmt != null && !stmt.isClosed()) stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
📑 ResultSet 객체 자원 반환 메서드
// @param rs
public static void close(ResultSet rs) {
try {
if(rs != null && !rs.isClosed()) rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
📑 트랜잭션 commit 메서드
// @param conn
public static void commit(Connection conn) {
try {
if(conn != null && !conn.isClosed()) conn.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
📑 트랜잭션 rollback 메서드
// @param conn
public static void rollback(Connection conn) {
try {
if(conn != null && !conn.isClosed()) conn.rollback();
} catch (Exception e) {
e.printStackTrace();
}
}