package egovframework.rte.psl.dataaccess;
import java.util.List;
import javax.annotation.Resource;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
/**
* Spring의 MyBatis 연동 지원 공통 parent DAO 클래스
*
* @author Vincent Han
* @since 2.6
*
*/
public abstract class EgovAbstractMapper extends SqlSessionDaoSupport {
/**
* Annotation 형식으로 sqlSession(SqlSessionFactoryBean)을 받아와
* 이를 super(SqlSessionDaoSupport)의 setSqlSessionFactory 메서드를 호출하여 설정해 준다.
* <p>
* SqlSessionTemplate이 지정된 경우된 경우 이 SqlSessionFactory가 무시된다. (Batch 처리를 위해서는 SqlSessionTemplate가 필요)
*
*
* @param sqlSession SqlSessionFactory로 MyBatis와의 연계를 위한 기본 클래스
*/
@Resource(name = "sqlSession")
public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
super.setSqlSessionFactory(sqlSession);
}
/**
* 입력 처리 SQL mapping 을 실행한다.
*
* @param queryId - 입력 처리 SQL mapping 쿼리 ID
* @param parameterObject - 입력 처리 SQL mapping 입력 데이터를 세팅한 파라메터 객체(보통 VO 또는 Map)
*
* @return DBMS가 지원하는 경우 insert 적용 결과 count
*/
public int insert(String queryId, Object parameterObject) {
return getSqlSession().insert(queryId, parameterObject);
}
/**
* 수정 처리 SQL mapping 을 실행한다.
*
* @param queryId - 수정 처리 SQL mapping 쿼리 ID
* @param parameterObject - 수정 처리 SQL mapping 입력 데이터(key 조건 및 변경 데이터)를 세팅한 파라메터 객체(보통 VO 또는 Map)
*
* @return DBMS가 지원하는 경우 update 적용 결과 count
*/
public int update(String queryId, Object parameterObject) {
return getSqlSession().update(queryId, parameterObject);
}
/**
* 삭제 처리 SQL mapping 을 실행한다.
*
* @param queryId - 삭제 처리 SQL mapping 쿼리 ID
* @param parameterObject - 삭제 처리 SQL mapping 입력 데이터(일반적으로 key 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
*
* @return DBMS가 지원하는 경우 delete 적용 결과 count
*/
public int delete(String queryId, Object parameterObject) {
return getSqlSession().delete(queryId, parameterObject);
}
/**
* pk 를 조건으로 한 단건조회 처리 SQL mapping 을 실행한다.
*
* @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
* @param parameterObject - 단건 조회 처리 SQL mapping 입력 데이터(key)를 세팅한 파라메터 객체(보통 VO 또는 Map)
*
* @return 결과 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)
*/
public Object selectByPk(String queryId, Object parameterObject) {
return getSqlSession().selectOne(queryId, parameterObject);
}
/**
* 리스트 조회 처리 SQL mapping 을 실행한다.
*
* @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
* @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
*
* @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List
*/
@SuppressWarnings("rawtypes")
public List list(String queryId, Object parameterObject) {
return getSqlSession().selectList(queryId, parameterObject);
}
/**
* 부분 범위 리스트 조회 처리 SQL mapping 을 실행한다.
* (부분 범위 - pageIndex 와 pageSize 기반으로 현재 부분 범위 조회를 위한 skipResults, maxResults 를 계산하여 ibatis 호출)
*
* @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
* @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
* @param pageIndex - 현재 페이지 번호
* @param pageSize - 한 페이지 조회 수(pageSize)
*
* @return 부분 범위 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 부분 범위 결과 객체(보통 VO 또는 Map) List
*/
@SuppressWarnings("rawtypes")
public List listWithPaging(String queryId, Object parameterObject, int pageIndex, int pageSize) {
int skipResults = pageIndex * pageSize;
//int maxResults = (pageIndex * pageSize) + pageSize;
RowBounds rowBounds = new RowBounds(skipResults, pageSize);
return getSqlSession().selectList(queryId, parameterObject, rowBounds);
}
}