Spring | Annotation을 이용해 간단한 JDBC 구현하기

brightbell·2023년 9월 26일

Spring

목록 보기
5/12

구현한 순서
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();
  }
}

0개의 댓글