Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Developer N

[MyBatis] MyBatis란? 본문

STUDY/DBMS

[MyBatis] MyBatis란?

nnh 2023. 2. 21. 14:46
728x90

마이바티스(MyBatis)란?

  • 자바 객체와 SQL문 사이를 자동으로 매핑해주는 ORM(Object Relation Mapping) 프레임워크
  • SQL 파일을 별도로 분리하여 관리 가능하며, 객체와 SQL 사이의 파라미터를 자동으로 매핑해주기 때문에 편리
  • SQL 쿼리문을 그대로 사용하며 도메인 객체나 VO 객체 중심으로 개발 가능

 

특징

  • JDBC의 기능을 대부분 제공 (자동으로 제공하므로 깔끔한 코드 유지 가능)
  • SQL문과 프로그래밍 코드 분리 가능
    • SQL 쿼리를 변경할 때마다 자바 코드를 수정하거나 따로 컴파일할 필요X
    • SQL 작성과 관리 분담 가능
  • 다양한 프로그래밍 언어 사용 가능 (Java, C#, .NET, Ruby)

 

Mapper XML File

  • MaBatis Mapper XML (SQL Mapping XML) File은 실행할 SQL문을 정의해놓은 파일
  • SQL문 실행을 위해 Parameter Object를 받아오거나 SQL문 실행 결과를 Result Object에 자동 바인딩하는 기능 등 제공
  • Mapper XML File의 요소
 요소 설명
<select> 데이터를 조회하는 select 구문 작성하는 요소
<insert> 데이터를 삽입하는 insert 구문 작성하는 요소
<update> 데이터를 수정하는 update 구문 작성하는 요소
<delete> 데이터를 삭제하는 delete 구문 작성하는 요소
  • <select> 요소의 속성
속성 설명
id 해당 구문 호출시 사용되는 값
각 sql문을 구분하는 유일한 식별자 (필수)
parameterType 해당 구문에 전달될 파라미터의 패키지 경로를 포함한 전체 클래스명이나 별칭
resultType 해당 구문이 리턴하는 타입의 패키지 경로를 포함한 전체 클래스명이나 별칭
resultMap <select> 외부에 정의된 Result Object(<resultMap>)를 참조하는 방법
parameterMap <select> 외부에 정의된 Parameter Object(<parameterMap>)를 참조하는 방법
권장하지 않음
(parameterType 속성이나 Inline Parameter를 권장)
flushCache 이 속성값이 true이면, 구문이 호출될 때마다 캐시 지원
(기본값 false)
useCache 이 속성값이 true이면, 구문의 결과가 캐시됨
(기본값 true)
timeout 예외가 던져지기 전에 데이터베이스의 요청 결과를 기다리는 최대 시간
  • <insert>, <update>, <delete>에는 resultType이 없고 row의 개수를 반환
    • <insert> : 삽입된 행의 개수 반환
    • <update> : 수정에 성공한 행의 개수 반환 (실패시 0 반환)
    • <delete> : 삭제한 행의 개수 반환

 

#{}와 ${}의 차이

  • #{}
    • 파라미터가 String 형태로 들어와 값에 ' '가 자동으로 붙음
    • PreparedStatement를 통해 악의적인 쿼리주입 예방 가능
    • 보안차원에서 유리
    • 주로 사용자의 입력을 전달할 때 사용
  • ${}
    • 값에 ' '가 자동으로 붙지않고 해당 칼럼의 자료형에 맞추어 파라미터의 자료형이 변경된다.
    • Statement 방법으로 파라미터가 출력되어서 전달됨
    • 의도적인 쿼리주입을 막을 수 없음
    • SQL injection 보안 위험 발생 가능
    • 주로 table명, column명 전달시 사용 (#{}의 경우 자동으로 ' '가 붙어 사용 불가)
728x90
Comments