/* * Copyright 2014 MOSPA(Ministry of Security and Public Administration). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package egovframework.rte.psl.dataaccess; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.ibatis.session.ResultHandler; 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 * *<pre> * 수정일 수정자 수정내용 * ------------ -------- --------------------------- * 2014.01.22 권윤정 ResultHandler이용을 위한 listToOutUsingResultHandler() 메서드 추가 * 2014.07.11 이기하 selectByPk Deprecated 및 getSqlSession 메소드 추가 *</pre> */ public abstract class EgovAbstractMapper extends SqlSessionDaoSupport { /** * Annotation 형식으로 sqlSession(SqlSessionFactoryBean)을 받아와 * 이를 super(SqlSessionDaoSupport)의 setSqlSessionFactory 메서드를 호출하여 설정해 준다. * <p> * SqlSessionTemplate이 지정된 경우된 경우 이 SqlSessionFactory가 무시된다. (Batch 처리를 위해서는 SqlSessionTemplate가 필요) * </p> * * @param sqlSession SqlSessionFactory로 MyBatis와의 연계를 위한 기본 클래스 */ @Resource(name = "sqlSession") public void setSqlSessionFactory(SqlSessionFactory sqlSession) { super.setSqlSessionFactory(sqlSession); } /** * 입력 처리 SQL mapping 을 실행한다. * * @param queryId - 입력 처리 SQL mapping 쿼리 ID * * @return DBMS가 지원하는 경우 insert 적용 결과 count */ public int insert(String queryId) { return getSqlSession().insert(queryId); } /** * 입력 처리 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 * * @return DBMS가 지원하는 경우 update 적용 결과 count */ public int update(String queryId) { return getSqlSession().update(queryId); } /** * 수정 처리 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 * * @return DBMS가 지원하는 경우 delete 적용 결과 count */ public int delete(String queryId) { return getSqlSession().delete(queryId); } /** * 삭제 처리 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); } //CHECKSTYLE:OFF /** * 명명규칙에 맞춰 selectOne()로 변경한다. * @deprecated select() 메소드로 대체 * * @see EgovAbstractMapper.selectOne() */ //CHECKSTYLE:ON @Deprecated public Object selectByPk(String queryId, Object parameterObject) { return getSqlSession().selectOne(queryId, parameterObject); } /** * 단건조회 처리 SQL mapping 을 실행한다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map) */ public <T> T selectOne(String queryId) { return getSqlSession().selectOne(queryId); } /** * 단건조회 처리 SQL mapping 을 실행한다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 단건 조회 처리 SQL mapping 입력 데이터(key)를 세팅한 파라메터 객체(보통 VO 또는 Map) * * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map) */ public <T> T selectOne(String queryId, Object parameterObject) { return getSqlSession().selectOne(queryId, parameterObject); } /** * 결과 목록을 Map 을 변환한다. * 모든 구문이 파라미터를 필요로 하지는 않기 때문에, 파라미터 객체를 요구하지 않는 형태로 오버로드되었다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @param mapKey - 결과 객체의 프로퍼티 중 하나를 키로 사용 * * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)의 Map */ public <K, V> Map<K, V> selectMap(String queryId, String mapKey) { return getSqlSession().selectMap(queryId, mapKey); } /** * 결과 목록을 Map 을 변환한다. * 모든 구문이 파라미터를 필요로 하지는 않기 때문에, 파라미터 객체를 요구하지 않는 형태로 오버로드되었다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 맵 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param mapKey - 결과 객체의 프로퍼티 중 하나를 키로 사용 * * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)의 Map */ public <K, V> Map<K, V> selectMap(String queryId, Object parameterObject, String mapKey) { return getSqlSession().selectMap(queryId, parameterObject, mapKey); } /** * 결과 목록을 Map 을 변환한다. * 모든 구문이 파라미터를 필요로 하지는 않기 때문에, 파라미터 객체를 요구하지 않는 형태로 오버로드되었다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 맵 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param mapKey - 결과 객체의 프로퍼티 중 하나를 키로 사용 * @param rowBounds - 특정 개수 만큼의 레코드를 건너띄게 함 * * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)의 Map */ public <K, V> Map<K, V> selectMap(String queryId, Object parameterObject, String mapKey, RowBounds rowBounds) { return getSqlSession().selectMap(queryId, parameterObject, mapKey, rowBounds); } //CHECKSTYLE:OFF /** * 명명규칙에 맞춰 selectList()로 변경한다. * * @see EgovAbstractMapper.selectList() * @deprecated List<?> 메소드로 대체 */ //CHECKSTYLE:ON @Deprecated public List<?> list(String queryId, Object parameterObject) { return getSqlSession().selectList(queryId, parameterObject); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public <E> List<E> selectList(String queryId) { return getSqlSession().selectList(queryId); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map) * * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public <E> List<E> selectList(String queryId, Object parameterObject) { return getSqlSession().selectList(queryId, parameterObject); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param rowBounds - 특정 개수 만큼의 레코드를 건너띄게 함 * * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public <E> List<E> selectList(String queryId, Object parameterObject, RowBounds rowBounds) { return getSqlSession().selectList(queryId, parameterObject, rowBounds); } /** * 부분 범위 리스트 조회 처리 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 파일에서 지정한 resultType/resultMap 에 의한 부분 범위 결과 객체(보통 VO 또는 Map) List */ 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); } /** * SQL 조회 결과를 ResultHandler를 이용해서 출력한다. * ResultHandler를 상속해 구현한 커스텀 핸들러의 handleResult() 메서드에 따라 실행된다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param handler - 조회 결과를 제어하기 위해 구현한 ResultHandler * @return * * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public void listToOutUsingResultHandler(String queryId, ResultHandler handler) { getSqlSession().select(queryId, handler); } }