Java-JDBC프로그래밍 & MyBaits
JDBC
- JDBC(Java Database Connectivity)의 정의
- 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약
- 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API
- SQL과 프로그래밍 언어의 통합 접근 중 한 형태
- JAVA는 표준 인터페이스인 JDBC API를 제공
- 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 제공한다.
- JDBC를 사용하겠다 = 데이터베이스를 사용하겠다.
- DriverManger
- JVM에서 JDBC전체를 관리하는 class
- 기능: Driver등록, Connection 연결작업…)
- Driver
- DB를 만드는 Vendor(Oracle, MS-SQL, MySQL,….)를 implements하여
- 자신들의 DB를 연결할 수 있는 class를 만드는 인터페이스.
- Connection
- DB와 연결성을 가지고 있는 interface.
- Statement
- 실제 SQL문을 사용하기 위하여 Connection으로 부터 받아내는 interface.
- ResultSet
- Statement를 통하여 select을 실행하였을때 그 결과 Data를 가지고 있는 interface. - CSR이 제일 중요
JDBC Programming 순서
- Driver를 loading한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
- DB와 연결하여 Connection Object를 얻어낸다.
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
- Connection으로 부터 SQL문을 실행하기 위한 Statement Object를 생성.
Statement stmt = conn.createStatement();
- Statement Object의 API이용하여 SQL실행.
String sql = "insert into names values('" + name + "')"; stmt.executeUpdate(sql);
- SQL을 실행한 후 결과인 ResultSet Object를 얻는다.
ResultSet rs = stmt.executeQuery(sql);
- 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()하면 안됨.
댓글남기기