본문 바로가기
개발 공부

[iBatis SqlMaps] feat. DAO, DI

by 도됐좋 2023. 10. 6.
순서
1. iBatis
2. SqlMapClient & SqlMapClientTemplate
3. 주요 메소드

 

✅ iBatis

 특징

- 자바 오브젝트와 SQL문 사이에 자동 매핑 기능을 지원하는 ORM 프레임워크

- 공통 설정을 담은 XML 파일과 매핑 정보를 담은 XML 매핑 파일이 필요함

장점

- 자바 오브젝트만을 이용해 데이터 로직을 작성할 수 있게 해줌

- SQL을 자바 코드에서 분리해서 별도의 XML 파일 안에 작성하고 관리할 수 있음

- 오브젝트-SQL 사이의 파라미터 매핑 작업을 자동으로 해줌

- JPA나 Hibernate처럼 새로운 DB 프로그래밍 패러다임을 익혀야하는 부담이 없음

- 익숙한 SQL을 그대로 사용할 수 있으면서도 JDBC 코드 작성의 불편함을 제거해주고

  도메인 오브젝트나 DTO를 중심으로 개발이 가능

 


 

SqlMapClient & SqlMapClientTemplate

SqlMapClient

- iBatis의 핵심 API는 SqlMapClient 인터페이스에 담겨 있어서

  iBatis를 사용하려면 SqlMapClient를 구현한 오브젝트가 필요함

 

SqlMapClientTemplate

- iBatis용 DAO는 SqlMapClient 빈을 DI 받아서 iBatis 기능을 이용하는데

  SqlMapClient를 직접 사용하는 것보단 스프링이 제공하는 템플릿 오브젝트인 SqlMapClientTemplate을 이용해야

  스프링 데이터 엑세스 기술이 제공하는 다양한 장점을 누릴 수 있음

- *DAO에서는 아래와 같이, 또는 @Autowired를 이용한 초기화 메소드로,

  SqlMapClient 오브젝트를 *DI 받고 이를 이용해 SqlMqpClientTemplate 오브젝트를 만들어

  인스턴스 변수에 저장해두고 사용하는 방법이 일반적

*DAO : 실제로 DB에 접근하는 객체

*DI : 의존성 주입 (https://for-your-information.tistory.com/22)

public class MemberDao {

	private SqlMapClientTemplate sqlMapClientTemplate;

	public void setSqlMapCLient(SqlMapClient sqlMapClient) {
		sqlMapClientTemplate = new SqlMapClientTemplate(sqlMapClient);
	}
}

 


 

 주요 메소드

 등록

- Object insert(String statementName)

- Object insert(String statementName, Object parameterObject)

public void insert(Member member) {
	sqlMapClientTemplate.insert("insertMember", member);
}

 

 수정

- int update(String statementName)

- int update(String statementName, Object parameterObject)

- void update(String statementName, Object parameterObject, int requiredRowsAffected)

public void update(Member member) {
	sqlMapClientTemplate.update("updatetMember", member);
}

 

 삭제

- int delete(String statementName)

- ine delete(String statementName, Object parameterObject)

- void delete(String statementName, Object parameterObject, int requiredRowsAffected)

public void deleteAll() {
	sqlMapClientTemplate.delete("deleteAllMember");
}

 

 조회

▶ 단일 로우 조회 queryForObject()

- Object queryForObject(String statementName)

- Object queryForObject(String statementName, Object parameterObject)

- Object queryForObject(String statementName, Object parameterObject, Object resultObject)

 

▶ 다중 로우 조회 queryForList()

- List queryForList(String statementName)

- List queryForList(String statementName, Object parameterObject)

- List queryForList(String statementName, int skipResults, int maxResults)

- List queryForList(String statementName, Object parameterObject, int skipResults, int maxResults)

등등