구현한 순서
MyJdbcConnection 클래스
AppConfig(IoC Container) @Bean MyJdbcConnection 생성
MyJdbcDao 클래스
AppConfig(IoC Container) @Bean MyJdbcDao 생성
MyJdbcService 클래스
AppConfig(IoC Container) @Bean MyJdbcService 생성
결과확인
MyJdbcConnection 클래스
DB에 접속을 먼저 구현하기 위해 Connection을 만든다.
@NoArgsConstructor
@AllArgsConstructor
@Data
public class MyJdbcConnection {
private String driver;
private String url;
private String user;
private String password;
public Connection getConnection() {
Connection con = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
}
AppConfig(IoC Container) 클래스
@Bean MyJdbcConnection, @Bean MyJdbcDao, @Bean MyJdbcService 생성
MyJdbcConnection 클래스를 만든 후 해당 필드값을 bean을 통해 setter로 넣어줌
MyJdbcDao를 호출해서 메소드를 사용하기 위해 bean 객체로 만듦
MyJdbcDao와 마찬가지로 MyJdbcService를 호출해서 메소드를 사용하기 위해 bean객체로 만듦
@Configuration
public class AppConfig {
@Bean
public MyJdbcConnection myJdbcConnection() {
MyJdbcConnection myJdbcConnection = new MyJdbcConnection();
myJdbcConnection.setDriver("oracle.jdbc.OracleDriver");
myJdbcConnection.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:xe");
myJdbcConnection.setUser("db계정");
myJdbcConnection.setPassword("db비밀번호");
return myJdbcConnection;
}
@Bean
public MyJdbcDao myJdbcDao() {
return new MyJdbcDao();
}
@Bean
public MyJdbcService myJdbcService() {
return new MyJdbcService(myJdbcDao());
}
}
MyJdbcDao 클래스
만든 접속을 이용해 DB에서 동작할 메소드들을 만든다. (약식이라서 기능은 없음)
메소드를 호출할 때마다 접속과 접속닫기를 매번 하도록 만든다.
public class MyJdbcDao {
private Connection con;
private MyJdbcConnection myJdbcConnection;
private Connection getConnection() {
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
myJdbcConnection = ctx.getBean("myJdbcConnection", MyJdbcConnection.class);
ctx.close();
return myJdbcConnection.getConnection();
}
private void close() {
try {
if(con != null) {
con.close();
System.out.println(myJdbcConnection.getUser() + " 접속 해제");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void add() {
con = getConnection();
System.out.println("add() 호출");
close();
}
public void remove() {
con = getConnection();
System.out.println("remove() 호출");
close();
}
public void modify() {
con = getConnection();
System.out.println("modify() 호출");
close();
}
public void select() {
con = getConnection();
System.out.println("select() 호출");
close();
}
}
MyJdbcService 클래스
요청에 의해서 myJdbcDao의 메소드들이 호출될수 있도록 만든 service단의 메소드
@NoArgsConstructor
@AllArgsConstructor
@Data
public class MyJdbcService {
private MyJdbcDao myJdbcDao;
public void add() {
myJdbcDao.add();
}
public void remove() {
myJdbcDao.remove();
}
public void modify() {
myJdbcDao.modify();
}
public void select() {
myJdbcDao.select();
}
}
결과확인
bean으로 만들어놓은 AppConfig 클래스를 읽어들여서 그 안의 myJdbcService bean을 호출해 메소드를 사용하고 읽어들이기를 멈춤.
public class MainWrapper {
public static void main(String[] args) {
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyJdbcService myJdbcService = ctx.getBean("myJdbcService", MyJdbcService.class);
myJdbcService.add();
myJdbcService.remove();
myJdbcService.modify();
myJdbcService.select();
ctx.close();
}
}