정의
- MyBatis는 자바 퍼시스턴스 프레임워크의 하나로, XML 서술자나 애노테이션을 사용하여 저장 프로시저나 SQL 문으로 객체들을 매핑시킨다.
- 예전에는 iBatis라고 불리었으며 현재는 iBatis와 MyBatis는 완전히 다른 기능을 한다.
- 응용 프로그램 계층(자바) <-> 퍼시스턴스 계층(중간 계층) <-> 데이터베이스 계층(오라클)
- 중간 계층 기술 중 하나이다.(JDBC, MyBatis, JPA, Hibernate, Spring JDBC .. 등)
- MyBatis는 SQL 구문을 XML파일에서 작성
장점
. ibatis / mybatis는 xml파일에서 자유롭게 쿼리 작성이 가능해서 편리
1. 빠른 개발(생산성)
- 가독성, 유지보수 용이
DBCP만을 썼을 때는
- Connection, ResultSet, Statement, Transaction 관리
- 특히 운영하다 명시적인 Connection, ResultSet, Statement, Transaction을 잘못(닫질 않아) 써서 서버가 죽는경우 허다합니다.
- ResultSet의 데이터 매핑
- 하드코딩(""+""+"") 소스코드는 소스 분석 및 관리 어려움
2.SQL Injection 보안에 신경쓰지 않아도 됩니다.
- 물론 DBCP를 쓸 경우, PrepareStatement 쓰면 문제 없지만
3. Blob, Clob 치환 ( RDBMS: Oracle)
4. 디버깅 용이
- iBatis, myBatis 쿼리문의 ? => value로 매핑된 쿼리문으로 로그를 남기는 jar파일이 여럿 있습니다.
5. 데이터 캐싱(LIFO,FIFO, LRU) 가능
- 간단한 xml 설정만으로 (xml파일에 <cache /> 태그 사용) mybatis에서 select한 데이터 셋을 캐쉬 처리
- 그로인해 db부담 감소, 응답성 향상, 조회용 데이터 성능 개선
- 실제 대규모 사이트에서 적용 중
6. resultType, resultClass VO가 아닌 Map으로만 이용 가능
+
오라클 기준으로 말씀드리자면... 애플리케이션에서 DB 접속할 때 마다 DB쪽에서도 1:1로 프로세스가 생성됩니다. 예를 들어, 클라이언트 100개가 접속하면 오라클 서버 쪽에도 100개의 프로세스가 생성되는 식이죠. 문제는 오라클 서버 프로세스 생성하는 게 상당한 오버헤드를 일으킬 수 있습니다. 무엇보다 자원 재사용이 안되니까요.
그래서 나온게 커넥션 풀링(connection pooling)입니다. 미리 DB 연결을 맺어두고 그 pool 내에서 필요할 때 꺼내서 사용하고 반환하는 식이죠. 물론 접속이 늘어나면 커넥션 풀에서 자동으로 DB 접속 세션 수를 늘립니다.
mybatis나 ibatis가 커넥션 풀링 기능만 제공하는 건 아니에요. 말씀하신 것처럼 웹로직이나 다른 WAS에서도 기본적으로 제공하는 기능
형식
ibatis SQL Mapper 파일
<태그명 id="" parameterClass="" resultClass="">
SQL 쿼리
</태그명>
- id 속성
- 작성된 쿼리 식별
- 동일 이름 사용불가
- parameterClass 속성
- 쿼리실행에 필요한 인자값을 담는 클래스타입
- 기본자료형, ValueObject, Map 타입 설정 가능
- resultClass 속성
- 쿼리실행 후 반환값을 담는 클래스타입
- SELECT 쿼리일때만 사용된다.
- 기본자료형, ValueObject, HashMap 타입 설정 가능
ref)
https://kyhyuk.tistory.com/143
https://cmelcmel.tistory.com/72
https://okky.kr/articles/285215
'Language > Spring' 카테고리의 다른 글
[iBATIS/MyBATIS] 반환(Return)결과 (0) | 2022.12.23 |
---|---|
[MyBatis] CDATA (0) | 2022.12.16 |