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

iBatis
JDBC의 단점을 보완

iBatis 특징
- 쉽고 간단하고 의존성이 적은 프레임워크
- java소스에서 sql문을 분리하여 별도의 xml 파일에 작성
iBatis 적용
- iBatis 기능 제공해주는 아이바티스 프레임워크 jar파일 다운로드
- build Path 셋팅해줘야 iBatis 관련 클래스 사용 가능해짐
- 환경설정 : xml 형식으로 설정파일 만들어서 필요한 설정 SqlMapConfig.xml
SqlMapConfig.properties
- 데이터베이스 접속정보가 저장된 properties파일
SqlMapConfig.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
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
- 결과가 여러건인 경우
queryForList("namespace.id")
- 반환타입 List<>
- selector 작업 성공시 제너릭타입의 리스트 반환
- 결과가 1건인 경우
queryForObject("namespace")
- 반환타입 Object
- 원래 타입으로 캐스팅 필요함
U : update
update("namespace.id")
- 반환타입 int
- update 작업 성공시 성공한 레코드 수 반환
D : delete
delete("namespace.id")
- 반환타입 int
- delete 작업 성공시 성공항 레코드 수 반환