/* * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security). * * 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 egovframework.rte.psl.orm.ibatis.support.SqlMapClientDaoSupport; import com.ibatis.sqlmap.client.SqlMapClient; /** * Spring 의 iBatis 연동 지원을 Annotation 형식으로 쉽게 처리하기 위한 공통 parent DAO 클래스 * <p> * <b>NOTE</b>: Spring 에서 iBatis 연동을 지원하는 org.springframework.orm.ibatis.support.SqlMapClientDaoSupport을 * extends 하고 있으며 CRUD 와 관련한 대표적인 method 를 간단하게 호출할 수 있도록 Wrapping 하고 있어 사용자 DAO에서 * iBatis sqlMapClient 호출을 쉽게 하며 Bean 생성 시 Annotation 기반으로 sqlMapClient 을 쉽게 injection 할 수 있는 * 공통 로직을 포함하고 있다. * </p> * @author 실행환경 개발팀 우병훈 * @author Vincent Han * * @since 1.0 * * @see <pre> * == 개정이력(Modification Information) == * * 수정일 수정자 수정내용 * ------------ -------- --------------------------- * 2009.02.25 우병훈 최초 생성 * 2013.11.21 유지보수 listWithPaging 오류 수정 * 2014.07.11 이기하 selectByPk Deprecated 및 getSqlMapClientTemplate 메소드 추가 * * </pre> */ @SuppressWarnings("deprecation") public abstract class EgovAbstractDAO extends SqlMapClientDaoSupport { /** * EgovAbstractDAO 는 base class 로만 사용되며 해당 인스턴스를 직접 생성할 수 없도록 protected constructor 로 선언하였음. */ protected EgovAbstractDAO() { // PMD abstract Rule // - If the class is intended to be used as a base class only (not to be instantiated directly) // a protected constructor can be provided prevent direct instantiation } /** * Annotation 형식으로 sqlMapClient 를 받아와 이를 super(SqlMapClientDaoSupport) 의 setSqlMapClient 메서드를 호출하여 설정해 준다. * * @param sqlMapClient - ibatis 의 SQL Map 과의 상호작용을 위한 기본 클래스로 * mapped statements(select, insert, update, delete 등)의 실행을 지원함. */ @Resource(name = "sqlMapClient") public void setSuperSqlMapClient(SqlMapClient sqlMapClient) { super.setSqlMapClient(sqlMapClient); } /** * 입력 처리 SQL mapping 을 실행한다. * * @param queryId - 입력 처리 SQL mapping 쿼리 ID * @return 입력 시 selectKey 를 사용하여 key 를 딴 경우 해당 key */ public Object insert(String queryId) { return getSqlMapClientTemplate().insert(queryId); } /** * 입력 처리 SQL mapping 을 실행한다. * * @param queryId - 입력 처리 SQL mapping 쿼리 ID * @param parameterObject - 입력 처리 SQL mapping 입력 데이터를 세팅한 파라메터 객체(보통 VO 또는 Map) * @return 입력 시 selectKey 를 사용하여 key 를 딴 경우 해당 key */ public Object insert(String queryId, Object parameterObject) { return getSqlMapClientTemplate().insert(queryId, parameterObject); } /** * 수정 처리 SQL mapping 을 실행한다. * * @param queryId - 수정 처리 SQL mapping 쿼리 ID * @return DBMS가 지원하는 경우 update 적용 결과 count */ public int update(String queryId) { return getSqlMapClientTemplate().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 getSqlMapClientTemplate().update(queryId, parameterObject); } /** * 수정 처리 SQL mapping 을 실행한다. * 반환값이 없는 대신 예상 결과행 수와 맞지 않으면 예외 오류 발생한다. * * @param queryId - 수정 처리 SQL mapping 쿼리 ID * @param parameterObject - 수정 처리 SQL mapping 입력 데이터(key 조건 및 변경 데이터)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param requiredRowsAffected - 수정할 row 수 */ public void update(String queryId, Object parameterObject, int requiredRowsAffected) { getSqlMapClientTemplate().update(queryId, parameterObject, requiredRowsAffected); } /** * 삭제 처리 SQL mapping 을 실행한다. * * @param queryId - 삭제 처리 SQL mapping 쿼리 ID * @return DBMS가 지원하는 경우 delete 적용 결과 count */ public int delete(String queryId) { return getSqlMapClientTemplate().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 getSqlMapClientTemplate().delete(queryId, parameterObject); } /** * 삭제 처리 SQL mapping 을 실행한다. * 반환값이 없는 대신 예상 결과행 수와 맞지 않으면 예외 오류 발생한다. * * @param queryId - 삭제 처리 SQL mapping 쿼리 ID * @param parameterObject - 삭제 처리 SQL mapping 입력 데이터(일반적으로 key 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param requiredRowsAffected - 삭제할 row 수 * @return DBMS가 지원하는 경우 delete 적용 결과 count */ public void delete(String queryId, Object parameterObject, int requiredRowsAffected) { getSqlMapClientTemplate().delete(queryId, parameterObject, requiredRowsAffected); } //CHECKSTYLE:OFF /** * 명명규칙에 맞춰 select()로 변경한다. * @deprecated select() 메소드로 대체 * * @see EgovAbstractDAO.select */ //CHECKSTYLE:ON @Deprecated public Object selectByPk(String queryId, Object parameterObject) { return getSqlMapClientTemplate().queryForObject(queryId, parameterObject); } /** * 단건조회 처리 SQL mapping 을 실행한다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @return 결과 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map) */ public Object select(String queryId) { return getSqlMapClientTemplate().queryForObject(queryId); } /** * 단건조회 처리 SQL mapping 을 실행한다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 단건 조회 처리 SQL mapping 입력 데이터(key)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @return 결과 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map) */ public Object select(String queryId, Object parameterObject) { return getSqlMapClientTemplate().queryForObject(queryId, parameterObject); } /** * 단건조회 처리 SQL mapping 을 실행한다. * * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 단건 조회 처리 SQL mapping 입력 데이터(key)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param resultObject - 특정 오브젝트로 결과값을 반환할 경우 * @return 결과 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map) */ public Object select(String queryId, Object parameterObject, final Object resultObject) { return getSqlMapClientTemplate().queryForObject(queryId, parameterObject, resultObject); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public List<?> list(String queryId) { return getSqlMapClientTemplate().queryForList(queryId); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map) * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public List<?> list(String queryId, Object parameterObject) { return getSqlMapClientTemplate().queryForList(queryId, parameterObject); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param skipResults - 쿼리를 시작하는 행 * @param maxResults - 최대 결과를 나타내는 행 * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public List<?> list(String queryId, int skipResults, int maxResults) { return getSqlMapClientTemplate().queryForList(queryId, skipResults, maxResults); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 입력 처리 SQL mapping 입력 데이터를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param skipResults - 쿼리를 시작하는 행 * @param maxResults - 최대 결과를 나타내는 행 * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List */ public List<?> list(String queryId, final Object parameterObject, int skipResults, int maxResults) { return getSqlMapClientTemplate().queryForList(queryId, parameterObject, skipResults, maxResults); } /** * 부분 범위 리스트 조회 처리 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 */ public List<?> listWithPaging(String queryId, Object parameterObject, int pageIndex, int pageSize) { int skipResults = pageIndex * pageSize; ///int maxResults = (pageIndex * pageSize) + pageSize; int maxResults = pageSize; return getSqlMapClientTemplate().queryForList(queryId, parameterObject, skipResults, maxResults); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 입력 처리 SQL mapping 입력 데이터를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param keyProperty - key값이 될 field * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 Map */ public Map<?, ?> map(final String queryId, final Object parameterObject, final String keyProperty) { return getSqlMapClientTemplate().queryForMap(queryId, parameterObject, keyProperty); } /** * 리스트 조회 처리 SQL mapping 을 실행한다. * * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID * @param parameterObject - 입력 처리 SQL mapping 입력 데이터를 세팅한 파라메터 객체(보통 VO 또는 Map) * @param keyProperty - key값이 될 field * @param valueProperty - map에 저장할 특정 field * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 Map */ public Map<?, ?> map(final String queryId, final Object parameterObject, final String keyProperty, final String valueProperty) { return getSqlMapClientTemplate().queryForMap(queryId, parameterObject, keyProperty, valueProperty); } }