본문 바로가기
언어/JAVA

인터페이스를 활용한 dao 구현

by step 1 2021. 4. 19.
반응형
  • DB에 회원정보를 넣는 dao(data access object)를 여러 DB제품이 지원 될 수 있게 구현함
  • 환경파일(db.properties)에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게 함

파일 구조

db.properties는 프로젝트파일에 바로 생성

DBTYPE=MYSQL

 

package ch33.domain.userinfo.dao;

import ch33.domain.userinfo.UserInfo;

public interface UserInfoDao {

	void insertUserInfo(UserInfo userInfo);
	void updateUserInfo(UserInfo userInfo);
	void deleteUserInfo(UserInfo userInfo);
}

 

package ch33.domain.userinfo.dao.mysql;

import ch33.domain.userinfo.UserInfo;
import ch33.domain.userinfo.dao.UserInfoDao;

public class UserInfoMySqlDao implements UserInfoDao{

	@Override
	public void insertUserInfo(UserInfo userInfo) {
		
		System.out.println("Insert into MySQL DB userID = " + userInfo.getUserId());
		
	}

	@Override
	public void updateUserInfo(UserInfo userInfo) {
		
		System.out.println("Update into MySQL DB userID = " + userInfo.getUserId());
	}

	@Override
	public void deleteUserInfo(UserInfo userInfo) {

		System.out.println("Delete into MySQL DB userID = " + userInfo.getUserId());
		
	}

}

 

package ch33.domain.userinfo.dao.oracle;

import ch33.domain.userinfo.UserInfo;
import ch33.domain.userinfo.dao.UserInfoDao;

public class UserInfoOracleDao implements UserInfoDao{

	@Override
	public void insertUserInfo(UserInfo userInfo) {
		
		System.out.println("Insert into Oracle DB userID = " + userInfo.getUserId());
		
	}

	@Override
	public void updateUserInfo(UserInfo userInfo) {
		
		System.out.println("Update into Oracle DB userID = " + userInfo.getUserId());
	}

	@Override
	public void deleteUserInfo(UserInfo userInfo) {

		System.out.println("Delete into Oracle DB userID = " + userInfo.getUserId());
		
	}

}

 

package ch33.domain.userinfo;

public class UserInfo {

	private String userId;
	private String password;
	private String userName;
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	
}

 

package ch33.web.userinfo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import ch33.domain.userinfo.UserInfo;
import ch33.domain.userinfo.dao.UserInfoDao;
import ch33.domain.userinfo.dao.mysql.UserInfoMySqlDao;
import ch33.domain.userinfo.dao.oracle.UserInfoOracleDao;

public class UserInfoClient {

	public static void main(String[] args) throws IOException {
		
		//자신의 프로젝트 파일에서 가장 먼저 찾음
		FileInputStream fis = new FileInputStream("db.properties");
		
		// key, value로 되어있는 쌍을 읽어오기 위한 클래스
		Properties prop = new Properties();
		
		prop.load(fis);
		
		String dbType = prop.getProperty("DBTYPE");
		
		UserInfo userInfo = new UserInfo();
		userInfo.setUserId("uid");
		userInfo.setPassword("pass");
		userInfo.setUserName("uName");
		
		UserInfoDao userInfoDao = null;
		
		if (dbType.equals("ORACLE")) {
			userInfoDao = new UserInfoOracleDao();
		}
		else if(dbType.equals("MYSQL")) {
			userInfoDao = new UserInfoMySqlDao();
		}
		else {
			System.out.println("db error");
			return;
		}
		
		userInfoDao.insertUserInfo(userInfo);
		userInfoDao.updateUserInfo(userInfo);
		userInfoDao.deleteUserInfo(userInfo);
	}
}

 

결과

반응형