반응형
- 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);
}
}
결과
반응형
'언어 > JAVA' 카테고리의 다른 글
여러 인터페이스 구현, 인터페이스의 상속 (0) | 2021.04.19 |
---|---|
인터페이스의 요소 (0) | 2021.04.19 |
인터페이스(interface) (0) | 2021.04.19 |
추상 클래스 응용 - 템플릿 메서드 패턴 (0) | 2021.04.18 |
추상 클래스(abstract class) 구현 (0) | 2021.04.18 |