MyBatis
1. Intro
1) 기존의 JDBC의 이슈
connecton => statement 객체 생성 => SQL문 전송 => ResultSet 객체반환 => close
- sql문이 프로그래밍 코드에 섞여 코드를 복잡하게하여 사용 및 유지보수가 어려워짐.
2) Mybatis framework를 도입해서 SQL문 가독성 높여 사용 편리성 만듦
- 코드와 SQL문 분리해서 사용 및 유지보수 편리하게 함.
2. 개요
1) SQL을 별도 파일(XML)로 분리 관리
- 객체-SQL 사이의 파라미터 Mapping 작업을 자동으로 해줌.
2) JDBC 코드 작성의 불편함 제거
3. MyBatis 특징
- 퍼시턴스(Persistence) 프레임 워크
- JDBC의 모든 기능을 대부분 제공
- SQL에 변경이 있을때마다 자바 코드를 수정하거나 컴파일하지 않아도 됨
- 데이터소스(DataSource) 기능과 트랜잭션 처리 기능을 제공
4. MyBatis3 주요 컴포넌트
1) Config.xml (MyBatis 설정 파일)
- 데이터베이스 접속 주소 정보나 Mapping 파일 경로등 고정된 환경정보 설정
2) mapping 파일 (mapper.xml)
3) SqlSessionFactoryBuilder
4) SqlSessionFactory
5) SqlSession
- 핵심적인역할하는 클래스로서 SQL 실행이나 트랜잭션 관리
- Thread-Safe 하지 않으므로 thread마다 필요에 따라 생성함.
5. MyBatis-Spring 주요 컴포넌트
1) SqlSessionFactoryBean
- 설정파일(Config.xml)을 바탕으로 SqlSessionFactory를 생성
2) SqlSessionTemplate
- 핵심적인 역할하는 클래스로서 SQL 실행이나 트랜잭션 관리
- Thread-Safe 함
- SqlSession 인터페이스를 구현함.
5.5 Test
1) pom.xml dependency 추가
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/
com.oracle.database.jdbc/ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.6.0.0.1</version>
</dependency>
2) MemberDTO 생성
package kr.co.mybatis.orm01;
import java.sql.Date;
public class MemberDTO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
// 생성자
public MemberDTO() {
}
public MemberDTO(String id, String pwd, String name, String email) {
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
}
// 게터/세터 생성
...
3) mapper.xml 생성
Mybatis에서 <![CDATA]>를 사용하는 이유
6. SqlSession 클래스에서 제공하는 메소드
1) List selectList(id)
- id에 대한 select문 실행한 후 여러 레코드들 List로 반환함
2) T selectOne(id)
- id에 대한 select문 실행한 후 한 개의 레코드 반환함
3) int insert(id)
- id에 대한 insert문 실행하면서 obj 객체의 값을 테이블에 추가함
4) int Update(id,Object obj)
- obj 객체의 값을 조건문의 수정 값으로 사용해 id에 대한 update문 실행
5) int delete(id,Object obj)
- obj 객체의 값을 조건문의 조건 값으로 사용해 id에 대한 delete문 실행
7. 마이바티스로 조건 값 전달 방법
1) SQL문에서 조건 값 사용방법
8. 마이바티스 동적 SQL문
1) 주로 SQL문의 조건절에서 사용
2) JSTL과 XML기반으로 동적 SQL문 작성
- if
- choose(when, otherwise)
- trim()
- foreach
3) <if>
태그
<where>
<if test='조건식'>
추가할 구문
</if>
</where>
<select id = "searchMember" parameterType="memberDTO" resultMap="memResult">
<!-- 공통 SQL문 -->
<![CDATA[
SELECT * from T_MEMBER
]]>
<where>
<if test="name !='' and name !=null">
name = #{name}
</if>
<if test="email !='' and email !=null">
and email = #{email}
</if>
</where>
order by joinDate desc
</select>
4) <choose>
태그
<choose>
<when test="조건식1">
구문1
</when>
<when test="조건식2">
구문2
</when>
...
<otherwise>
구문 n + 1
</otherwise>
</choose>
댓글남기기