여러가지 예
DB에 회원 정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현함db.properties) 에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게 함source hierachy
UserInfo.java (사용자 정보 클래스)
package ch13.domain.userinfo; public class UserInfo { private String userId; private String password; 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; } private String userName; }
UserInfoDao.java (dao에서 제공되어야 할 메서드를 선언한 인터페이스)
package ch13.domain.userinfo.dao; import ch13.domain.userinfo.UserInfo; public interface UserInfoDao { void insertUserInfo(UserInfo userinfo); void updateUserInfo(UserInfo userinfo); void deleteUserInfo(UserInfo userinfo); }
UserInfoMySqlDao.java (UserInfoDao 인터페이스를 구현한 MySql 버전 dao)
package ch13.domain.userinfo.dao.mysql; import ch13.domain.userinfo.UserInfo; import ch13.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 from MySQL DB userID = " + userinfo.getUserId()); } }
UserInfoOracleDao.java (UserInfoDao 인터페이스를 구현한 Oracle 버전 dao)
package ch13.domain.userinfo.dao.oracle; import ch13.domain.userinfo.UserInfo; import ch13.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 from ORACLE DB userID = " + userinfo.getUserId()); } }
UserInfoClient.java (UserInfoDao 인터페이스를 활용하는 클라이언트 프로그램)
package ch13.web.userinfo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import ch13.domain.userinfo.UserInfo; import ch13.domain.userinfo.dao.UserInfoDao; import ch13.domain.userinfo.dao.mysql.userInfoMysqlDao; import ch13.domain.userinfo.dao.oracle.UserInfoOracleDao; public class UserInfoClient { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("db.properties"); Properties prop = new Properties(); prop.load(fis); String dbType = prop.getProperty("DBTYPE"); UserInfo userinfo = new UserInfo(); userinfo.setUserId("12345"); userinfo.setPassword("!@#$"); userinfo.setUserName("Lee"); 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); } }
db.properties (db.properties 환경파일이 MYSQL 일때)
DBTYPE=MYSQL실행 결과
db.properties (db.properties 환경파일이 ORACLE 일때)
DBTYPE=ORACLE실행 결과