고급자바_iBatis

wstudee·2020년 10월 7일
0

JAVA_고급

목록 보기
10/19

iBatis

JDBC
단점 : 반복되는 부분으로 소스가 필요이상으로 길어짐

iBatis
JDBC의 단점을 보완

iBatis 특징

  • 쉽고 간단하고 의존성이 적은 프레임워크
  • java소스에서 sql문을 분리하여 별도의 xml 파일에 작성

iBatis 적용

  • iBatis 기능 제공해주는 아이바티스 프레임워크 jar파일 다운로드
  • build Path 셋팅해줘야 iBatis 관련 클래스 사용 가능해짐
  • 환경설정 : xml 형식으로 설정파일 만들어서 필요한 설정 SqlMapConfig.xml

SqlMapConfig.properties

  • 데이터베이스 접속정보가 저장된 properties파일

SqlMapConfig.xml

  • xml 파일은 깐깐해서 설정파일로 많이 씀

환경설정 부분

  • DB와 연결하는 정보를 properties 파일에 설정해놓고
    이 properties파일의 내용을 읽어와 설정함
  • iBatis를 처리하기 위한 환경설정 부분
  • VO클래스 등의 이름이 너무 길어질 때 간단히 표시하기 위해 alias를 지정할 수 있음

DB와의 연결을 처리하는 부분

SIMPLE

  • simplDataSourceFactory
  • 데이터소스를 제공하는 컨테이너가 없는 경우 connection을 제공하기 위해 기본적으로 pooling 데이터 소스 구현 제공

DCBP

  • dbcpDataSourceFactory
  • DataSource API를 통해 connection pooling서비스를 제공하기 위해 사용
  • 이 DataSource는 어플리케이션/ 웹컨테이너가 DataSource 구현물을 제공하지 못하거나 standalone 어플리케이션을 구동할 때 이상적

JNDI

  • JndiDataSourceFactory
  • 어플리케이션 컨테이너 내 JNDI 컨텍스트로부터 DataSource 구현물을 가져와야 함.
  • 이것은 어플리케이션 서버를 사용중이고 컨테이너 관리 connection pool과 DataSource가 제공될 때 사용
  • JDBC DataSource 구현물에 접근하기 위한 표준적인 방법은 JNDI 컨텍스트를 통해 접근하는 것

sql문 포함하는 xml문서 연결

  • 실제 처리할 SQL문은 xml문서를 따로 만들고 아래와 같이 연결하여 사용

member.xml

  • 처리할 SQL문

namespace

  • 네임스페이스 사용하는 이유 : 패키지와 비슷
    클래스명/id 충돌 방지.

매핑작업

  • DB의 컬럼명과 VO클래스등의 변수이름 매핑
  • 쿼리문을 select mem_id as memId.. 이런 식으로 작성해도 되지만 여러번 사용할거라면 resultMap으로 처리해주는 게 좋음

쿼리문 작성

  • insert, update, delete, select 태그 사용

속성

  • id (필수) : 해당 태그를 호출할 때 sqlMap태그의 namespace와 연결
  • parameterClass : sql문에 사용될 데이터가 들어있는 객체 지정
    보통은 VO클래스, 자바의 자료형이름 등이 사용됨
    typeAlias로 지정한 alias명을 사용할 수 있음
    생략가능함
  • resultClass/resultMap : select문을 실행한 결과를 담을 객체 지정
    보통 VO클래스나 자바의 자료형 이름 사용

동적쿼리 작성법

isNotEmpty : null 도 아니고 size=0 도 아닐 때 실행되는 태그

## 과 $$ 차이

  • ## : String은 ' '로 감싸고, int는 그냥 넣어줌
  • $$ : 입력한 데이터 그대로 삽입

SqlMapClient 객체 생성

  • 싱글톤패턴으로 SqlMapClient 객체 생성하기 위한 클래스

C : insert

insert("namespace.id")

  • 반환타입 Object
  • insert 작업 성공시 null 반환

R : select

  1. 결과가 여러건인 경우
    queryForList("namespace.id")
  • 반환타입 List<>
  • selector 작업 성공시 제너릭타입의 리스트 반환
  1. 결과가 1건인 경우
    queryForObject("namespace")
  • 반환타입 Object
  • 원래 타입으로 캐스팅 필요함

U : update

update("namespace.id")

  • 반환타입 int
  • update 작업 성공시 성공한 레코드 수 반환

D : delete

delete("namespace.id")

  • 반환타입 int
  • delete 작업 성공시 성공항 레코드 수 반환

0개의 댓글