JDBCTemplate

이민경·2024년 3월 19일

현재 배운 것을 바탕으로 RUN ▶ VIEW ▶ SERVICE ▶ DAO 순서로 작성해보려고 한다.
더불어, XMLFILE을 생성하는 Class를 만들어서 .xml 파일을 만들고 sql내용을 작성한 후 이를 연결하여 실행해보려고 한다.

그 전에 개념을 먼저 알아본 후 JDBCTemplate 클래스를 만들어보자!👩‍🏫

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();
		}
	}
profile
풀스택 개발자

0개의 댓글