본문 바로가기
Developer/Spring & eGovFrame

[eGovFrame] EgovAbstractDAO.java

by 순수한소년 2022. 12. 12.
728x90
반응형

전자정부프레임워크를 구현하다보면, SQL ID가 보이지 않아 짜증날 때가 있다.

해당 클래스를 이클립스에 넣고 실행해보자.

 

본 기술의 출처는 전자정부프레임워크 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
/*
 * 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;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
 * 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 메소드 추가 
 *   2022.12.09                  queryId를 출력이 가능하게 커스터마이징
 * </pre>
 */
@SuppressWarnings("deprecation")
public abstract class EgovAbstractDAO extends SqlMapClientDaoSupport {
 
    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    
    /**
     * 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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        return getSqlMapClientTemplate().insert(queryId, parameterObject);
    }
 
    /**
     * 수정 처리 SQL mapping 을 실행한다.
     *
     * @param queryId - 수정 처리 SQL mapping 쿼리 ID
     * @return DBMS가 지원하는 경우 update 적용 결과 count
     */
    public int update(String queryId) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        getSqlMapClientTemplate().update(queryId, parameterObject, requiredRowsAffected);
    }
 
    /**
     * 삭제 처리 SQL mapping 을 실행한다.
     *
     * @param queryId - 삭제 처리 SQL mapping 쿼리 ID
     * @return DBMS가 지원하는 경우 delete 적용 결과 count
     */
    public int delete(String queryId) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        getSqlMapClientTemplate().delete(queryId, parameterObject, requiredRowsAffected);
    }
 
    //CHECKSTYLE:OFF
    /**
     * 명명규칙에 맞춰 select()로 변경한다.
     * @deprecated select() 메소드로 대체
     * 
     * @see EgovAbstractDAO.select
     */
    //CHECKSTYLE:ON
    @Deprecated
    public Object selectByPk(String queryId, Object parameterObject) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        return getSqlMapClientTemplate().queryForObject(queryId, parameterObject);
    }
 
    /**
     * 단건조회 처리 SQL mapping 을 실행한다.
     *
     * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
     * @return 결과 객체 - SQL mapping 파일에서 지정한 resultClass/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)
     */
    public Object select(String queryId) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        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) {
        LOGGER.debug("\n\n@@@@@@@ queryId @@@@@@@\n"+queryId+"\n"+"@@@@@@@@@@@@@@@@@@@@@@@"+"\n");
        return getSqlMapClientTemplate().queryForMap(queryId, parameterObject, keyProperty, valueProperty);
    }
 
}
 
cs
728x90
반응형