Language/Spring

[iBATIS/MyBATIS] MyBatis 개념

idleday 2022. 12. 23. 11:00

 

정의

 

- 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