Java-JDBC프로그래밍 & MyBaits

1 분 소요

JDBC

  • JDBC(Java Database Connectivity)의 정의
  • 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약
  • 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API
  • SQL과 프로그래밍 언어의 통합 접근 중 한 형태
  • JAVA는 표준 인터페이스인 JDBC API를 제공
  • 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 제공한다.
  • JDBC를 사용하겠다 = 데이터베이스를 사용하겠다.
  1. DriverManger
    • JVM에서 JDBC전체를 관리하는 class
    • 기능: Driver등록, Connection 연결작업…)
  2. Driver
    • DB를 만드는 Vendor(Oracle, MS-SQL, MySQL,….)를 implements하여
    • 자신들의 DB를 연결할 수 있는 class를 만드는 인터페이스.
  3. Connection
    • DB와 연결성을 가지고 있는 interface.
  4. Statement
    • 실제 SQL문을 사용하기 위하여 Connection으로 부터 받아내는 interface.
  5. ResultSet
    • Statement를 통하여 select을 실행하였을때 그 결과 Data를 가지고 있는 interface. - CSR이 제일 중요

JDBC Programming 순서

  1. Driver를 loading한다.
     Class.forName("oracle.jdbc.driver.OracleDriver");
    
  2. DB와 연결하여 Connection Object를 얻어낸다.
     Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
    
  3. Connection으로 부터 SQL문을 실행하기 위한 Statement Object를 생성.
     Statement stmt = conn.createStatement();
    
  4. Statement Object의 API이용하여 SQL실행.
     String sql = "insert into names values('" + name + "')";
     stmt.executeUpdate(sql);
    
  5. SQL을 실행한 후 결과인 ResultSet Object를 얻는다.
     ResultSet rs = stmt.executeQuery(sql);
    
  6. ResultSet Object에 있는 결과 자료를 loop를 이용하여 처리한다.
     while(rs.next()) {
         System.out.println("사번 : " + rs.getInt(1));
         System.out.println("사원명 : " + rs.getString(2));
     }
    

Statement (java.sql.Statement)

  • Statement에서는 executeQuery(),excecuteUpdate()메소드를 실행하는 시점에
  • 파라미터로 SQL문을 DB에 전달한다.

  • 장점 : 사용된 SQL문 전체를 명확히 알 수 가 있어서 디버깅이 쉽다.
  • 단점 : 조건값이 틀린 많은 수의 SQL문을 반복 실행하게 되는 경우, DB서버에서 모두 새롭게
  • PARSING되어야 하므로 부하가 생길수 있다.
  • SQL Injection에 취약.

PreparedStatement(java.sql.PreparedStatement)

  • PreparedStatement는 커넥션에서 생성하면서 SQL문이 DB에 전송되어진다.
  • Statement클래스를 상속하고 있음

  • 장점
    • bind변수를 사용하여 DB서버에서 파싱된 SQL을 재사용하게 만듬으로,
    • 반복적인 다량의 SQL수행시 성능상 이득이 있다.
    • 반복 루프를 통해서 하나의 SQL문에 변수값만 입력하며 반복 실행 할 수 있음.
    • SQL injection예방의 방법이 될 수 있다.
  • 단점:
    • 오류발생 시, 변수에 입력되는 값을 알 수 없어서 디버깅이 어렵다.

MyBatis

  • MyBatis의 등장으로 JDBC코드를 줄이고 SQL에 전념할 수 있게됨.
  • MyBatis란 SQL Mapper Framework이다. (= JDBC Framework)
  • MyBatis에 XML이 사용되므로 알아야함.
  • SAXParseException이 나오면 대부분 xml문서가 잘못 작성되는것.
  • MyBatis의 경우 SQL문을 사용할 때 상황에 따라 >이거나 <를 많이 쓰게 되는데 이는 XML문법과 어긋나므로 아래와 같이 처리해야함.
    <delete id="del">
      <![CDATA[delete from emp2 where empno>1]]>
    </delete>
  • 각 태그에는 속성 parameterType, resultType을 기술할 수 있음
  • parameterType속성은 매개변수를, resultType속성은 리턴자료형을 의미함.
  • ex) parameterType = “String”, resultType = “int”, resultType = “PersonBeans”
  • parameterType → 생략추천
  • resultType → select (반드시 기술해야함.)

  • SqlSession 객체만 생성하면 xml의 sql문을 불러올 수 있음.
  • select는 commit()하면 안됨.

카테고리:

업데이트:

댓글남기기