Language/SQL

[DATABASE] 자바를 통한 DB 모듈화

simDev1234 2022. 4. 23. 23:57

■ DB 모듈화 전체 구성

* 화살표 방향은 무시하고 전체적인 흐름만 보세요.

 

■ Connection(서버연결) 관리 객체

  드라이버를 로딩하고, DB 서버와 연결하는 객체 

 

- DAO가 Connection 관리 객체에게 DB 연결

  곧, Connection을 요청하면, Connection 인스턴스를 DAO에게 전달한다.

 

[코드 예시]

package service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBservice {
	
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버를 찾을 수 없습니다.");
		}
	}
	
	private static DBservice single = null;
	
	public static DBservice getInstance() {
		
		if (single == null) {
			single = new DBservice();
		}
		
		return single;
		
	}
	
	private DBservice(){
		
	}
	
	public Connection getConnection() throws SQLException{
		
		Connection conn = null;
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "test1";
		String pwd = "test1";
		
		conn = DriverManager.getConnection(url, user, pwd);
		
		return conn;
	}
	
}

 

■ VO (Value Object) : 칼럼의 맴버와 타입을 저장관리하는 객체

  DB의 테이블 칼럼을 필드맴버로 저장한 객체 

 

- 객체지향적으로 데이터의 속성 정보를 저장하는 객체이다.

- 일종의 구조체와 같아 보인다. 

   [Person이라는 객체 안에 name, age, addr]이 등록되는 것과 같이 객체의 속성을 저장한다.

 

Rf. 과거에 DTO (Data Tranfer Object) 라고도 불렀다.

    - VO는 읽기, DTO는 읽기/쓰기 모두 가능한 경우

 

[코드 예시]

package vo;

public class MemberVo {

	int ein;
	String name;
	String addr;
	String ssn; //주민번호
	int hireday;
	String id;
	String pwd;
	
	//Getter, Setter
	public int getEin() {
		return ein;
	}
	public void setEin(int ein) {
		this.ein = ein;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getSsn() {
		return ssn;
	}
	public void setSsn(String ssn) {
		this.ssn = ssn;
	}
	public int getHireday() {
		return hireday;
	}
	public void setHireday(int hireday) {
		this.hireday = hireday;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	
	
}

 

■ DAO (Data Access Object) - DB정보를 CRUD하는 객체

  데이터를 DB에서 불러와, LIST형태로 저장하는 객체   *데이터 CRUD 담당    

 

- 기능 : Create / Read/ Update / Delete

- 메서드 : insert / select / update / delete

 

   selectList()       -->   테이블의 리스트 정보를 선택하여 반환
   insert(VO)       -->   신규 레코드 삽입
   update(VO)     -->    기존 레코드 수정
   delete(칼럼명)  -->   칼럼 삭제

 

[코드 예시]

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import service.DBservice;
import vo.MemberVo;

public class MemberDao {
	
	private static MemberDao single = null;
	
	private MemberDao() {};
	
	public static MemberDao getInstance() {
		
		if (single == null) {
			single = new MemberDao();
		}
		
		return single;
	}
	
	public List<MemberVo> selectList(){
		
		List<MemberVo> list = new ArrayList<MemberVo>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM member";
		
		try {
			conn = DBservice.getInstance().getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			while (rs.next()) {
				
				MemberVo vo = new MemberVo();
				
				vo.setEin(rs.getInt("ein"));
				vo.setName(rs.getString("name"));
				vo.setAddr(rs.getString("addr"));
				vo.setSsn(rs.getString("ssn"));
				vo.setHireday(Integer.parseInt(rs.getString("hireday"))+1900);
				vo.setId(rs.getString("id"));
				vo.setPwd(rs.getString("pwd"));
				
				list.add(vo);
				
			}
			
		} catch (Exception e) {
			
		} finally {
			try {
				if (rs != null) rs.close();
				if (pstmt != null) pstmt.close();
				if (conn != null) conn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
		return list;
	}
	
}