패키지 계층구조없이 코드를 완성해 봅시다.
패키지 ex10을 먼저 만들어 주세요.
※ chapter03 생략
1. UserInfo 클래스 생성
package ex10;
// 1 UserInfo 클래스를 만들어 줍니다.
public class UserInfo {
private String userId;
private String password;
private String userName;
// 멤버 변수가 접근 지시 제어자가
// private 이기 때문에 getter, setter 메서드를 만들어 줍니다.
// 단축키 Alt + Shift + s --> Generate getter and setter 클릭
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;
}
}
2. UserInfoDao 인터페이스 생성
package ex10;
// 2. UserInfoDao 인터페이스를 선언 하고 추상 메서드 선언을 합니다.
public interface UserInfoDao {
// 클라이언트 쪽 개발자는 인터페이스만 보고 기능을 구현할 수 있습니다.
// DB 쪽 연결 기능을 구현하는 개발자도 인터페이스만 보고 기능을 구현할 수 있습니다.
// 둘다 매개 변수로 UserInfo 객체만 넘겨주면(인스턴스 변수) 프로그램이 실행 될 수 있도록
// 처리 하겠다는 의미 입니다.
void insertUserInfo(UserInfo userInfo);
void updateUserInfo(UserInfo userInfo);
void deleteUserInfo(UserInfo userInfo);
}
3. UserInfoMySqlDao 객체 생성 ( UserInfoDao 인터페이스 구현)
package ex10;
// 3. DB 쪽 연결 개발자는 UserInfoDao 인터페이스를 implement 합니다.
public class UserInfoMySqlDao implements UserInfoDao {
// 인터페이스 추상 메서드를 실제로 구현합니다.
// 클래스 이름에 마우스를 올려 놓으면 해결 방안을 이클립스가 안내해 줍니다.
@Override
public void insertUserInfo(UserInfo userInfo) {
System.out.println("insert into MYSQL DB userId =' " + userInfo.getUserId() + " ' " );
System.out.println(" and pwd = ' " + userInfo.getPassword() + " ' ");
System.out.println(" and userName = ' " + userInfo.getUserName() + " ' ");
}
@Override
public void updateUserInfo(UserInfo userInfo) {
System.out.println("update MYSQL DB userName =' " + userInfo.getUserName() + " ' " );
}
@Override
public void deleteUserInfo(UserInfo userInfo) {
System.out.println("delete from MYSQL DB userId = ' " + userInfo.getUserId() + " ' ");
}
}
4. UserInfoOracleDao 객체 생성 ( UserInfoDao 인터페이스 구현)
package ex10;
//4. DB 쪽 연결 개발자는 UserInfoDao 인터페이스를 implement 합니다.
public class UserInfoOracleDao implements UserInfoDao {
// 인터페이스 추상 메서드를 구현합니다.
// 클래스 이름에 마우스를 올려 놓으면 해결 방안을 이클립스가 안내해 줍니다.
@Override
public void insertUserInfo(UserInfo userInfo) {
System.out.println("insert into ORACEL DB userId =' " + userInfo.getUserId() + " ' ");
System.out.println(" and pwd = ' " + userInfo.getPassword() + " ' ");
System.out.println(" and userName = ' " + userInfo.getUserName() + " ' ");
}
@Override
public void updateUserInfo(UserInfo userInfo) {
System.out.println("update ORACEL DB userName =' " + userInfo.getUserName() + " ' ");
}
@Override
public void deleteUserInfo(UserInfo userInfo) {
System.out.println("delete from ORACEL DB userId = ' " + userInfo.getUserId() + " ' ");
}
}
5. UserInfoClient 클래서 생성 (main 함수 실행 부분)
package ex10;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
// 5. UserInfo Client 쪽 개발자도 UserInfoDao 인터페이스만 보고 코드를 구현할 수 있습니다.
public class UserInfoClient {
public static void main(String[] args) throws IOException {
// 파일에 값에 따라서
// UserInfoMySqlDao 객체를 생성 또는
// UserInfoOracleDao 객체를 생성 할수 있도록 만들예정입니다.
// 1. 파일 만들기 chapter03 프로젝트 계층에서 파일을 만들어 줍니다.
// chapter03 클릭 오른쪽 마우스 New --> File 선택
// 2. 파일명 db.propertise10 이라고 입력합시다.
// 3. 생성된 파일에 DBTYPE=MYSQL 입력해 봅시다.
// 4 FileInputStream 객체 선언과 동시에 초기화를 합시다.
FileInputStream fis = new FileInputStream("db.properties10");
// 오류표시가 보이면 예외 처리를 해주면 됩니다. (파일이 없을 경우 에러 방지)
// main 메서드 괄호 옆에 throws IOException 라고 입력 또는 자동완성해 주세요.
// 5. 파일과 연결된 상태이기 때문에 파일안에 글자를 읽을수 있는 객체를 생성 합니다.
Properties prop = new Properties(); // key 와 value 타입으로 글자를 읽어주는 객체 입니다.
prop.load(fis); // FileInputStream 인스턴스 변수 fis와 Properties 객체를 연결(로드) 합니다.
// 글자를 가지고 오는 메서드를 실행하고 값을 변수에 담습니다.
String dbType = prop.getProperty("DBTYPE"); // MYSQL, ORACLE 값이 담김
// 6. 사용자한테 userInfo 정보를 받습니다.
UserInfo userInfo = new UserInfo();
userInfo.setUserId("myUserId");
userInfo.setPassword("123456!#");
userInfo.setUserName("홍길동");
// UserInfoDao 타입으로 userDao 인스턴스 변수 선언
UserInfoDao userDao = null;
if(dbType.equals("MYSQL")) {
// dbType 변수에 담기 값이 MYSQL과 같다면 실행.
userDao = new UserInfoMySqlDao(); // UserInfoMySqlDao 객체 생성(변수에 주소값 입력)
} else if(dbType.equals("ORACLE")) {
userDao = new UserInfoOracleDao(); // UserInfoOracleDao 객체 생성(변수에 주소값 입력)
} else {
System.out.println("error support db");
return;
}
// 인터페이스 UserInfoDao 선언된 메서드를 가지고 실행 시켜 봅시다.
userDao.insertUserInfo(userInfo);
userDao.updateUserInfo(userInfo);
userDao.deleteUserInfo(userInfo);
// DBTYPE=ORACLE 변경해서 실행해 봅시다.
// userDao.insertUserInfo(userInfo);
// userDao.updateUserInfo(userInfo);
// userDao.deleteUserInfo(userInfo);
}
}
※ 오류가 난다면 파일 생성 또는 파일안에 글자를 확인해주세요.
도전과제
1. UserInfoMssqlDao 객체를 생성하고 implements UseInfoDao 를 구현하고 코드를 작성해 봅시다.
2. UserInfoClient 객체 main 함수에 else if(dbType.equals("MSSQL)) 구문을 추가 해서 UserInfoMssqlDao 객체를 생성해 봅시다.
3. db.properties10 파일에 값을 DBTYPE=MSSQL 로 변경하고 메인 함수를 실행해 봅시다.