2024-08-21 14:59 주소록 관리 성능 향상을 위한 쿼리 변경
@2d8ef11cabcd8211a8c484fb0b781a12deb80cf0
--- src/main/java/itn/let/mjo/addr/service/AddrService.java
+++ src/main/java/itn/let/mjo/addr/service/AddrService.java
... | ... | @@ -22,6 +22,8 @@ |
| 22 | 22 |
|
| 23 | 23 |
List<AddrVO> selectAddrList(AddrVO addrVO) throws Exception; |
| 24 | 24 |
|
| 25 |
+ int selectAddrListCount(AddrVO addrVO) throws Exception; |
|
| 26 |
+ |
|
| 25 | 27 |
List<AddrVO> selectAddrNewList(AddrVO addrVO) throws Exception; |
| 26 | 28 |
|
| 27 | 29 |
AddrVO selectAddrDetail(AddrVO addrVO) throws Exception; |
--- src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java
... | ... | @@ -35,6 +35,10 @@ |
| 35 | 35 |
return (List<AddrVO>) list("AddrDAO.selectAddrList", addrVO);
|
| 36 | 36 |
} |
| 37 | 37 |
|
| 38 |
+ public int selectAddrListCount(AddrVO addrVO) throws Exception{
|
|
| 39 |
+ return (int)select("AddrDAO.selectAddrListCount", addrVO);
|
|
| 40 |
+ } |
|
| 41 |
+ |
|
| 38 | 42 |
/** |
| 39 | 43 |
* 주소록 목록(속도개선) |
| 40 | 44 |
* @param addrVO |
--- src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java
... | ... | @@ -74,6 +74,11 @@ |
| 74 | 74 |
return addrDAO.selectAddrList(addrVO); |
| 75 | 75 |
} |
| 76 | 76 |
|
| 77 |
+ @Override |
|
| 78 |
+ public int selectAddrListCount(AddrVO addrVO) throws Exception {
|
|
| 79 |
+ return addrDAO.selectAddrListCount(addrVO); |
|
| 80 |
+ } |
|
| 81 |
+ |
|
| 77 | 82 |
public List<AddrVO> selectAddrNewList(AddrVO addrVO) throws Exception {
|
| 78 | 83 |
return addrDAO.selectAddrNewList(addrVO); |
| 79 | 84 |
} |
... | ... | @@ -402,7 +407,7 @@ |
| 402 | 407 |
if(addrListVO.size() > MAX_SINGLE_ENTRY_CNT) {
|
| 403 | 408 |
return new StatusResponse( |
| 404 | 409 |
HttpStatus.BAD_REQUEST |
| 405 |
- , "주소록은 한번에 10만개까지만 등록이 가능합니다." |
|
| 410 |
+ , "주소록은 한번에 100만개까지만 등록이 가능합니다." |
|
| 406 | 411 |
, LocalDateTime.now() |
| 407 | 412 |
); |
| 408 | 413 |
|
... | ... | @@ -418,7 +423,7 @@ |
| 418 | 423 |
if(sumAddrCnt > MAX_ADDR_CNT) {
|
| 419 | 424 |
return new StatusResponse( |
| 420 | 425 |
HttpStatus.BAD_REQUEST |
| 421 |
- , "주소록은 총 50만개까지만 등록이 가능합니다." |
|
| 426 |
+ , "주소록은 총 1000만개까지만 등록이 가능합니다." |
|
| 422 | 427 |
, LocalDateTime.now() |
| 423 | 428 |
); |
| 424 | 429 |
|
--- src/main/java/itn/let/mjo/addr/web/AddrController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrController.java
... | ... | @@ -364,7 +364,9 @@ |
| 364 | 364 |
|
| 365 | 365 |
if(userId != "") {
|
| 366 | 366 |
addrVO.setMberId(userId); |
| 367 |
- } |
|
| 367 |
+ } else {
|
|
| 368 |
+ return "/web/addr/AddrListAjax"; |
|
| 369 |
+ } |
|
| 368 | 370 |
|
| 369 | 371 |
if(addrVO.getPageUnit() != 10) {
|
| 370 | 372 |
addrVO.setPageUnit(addrVO.getPageUnit()); |
--- src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml
... | ... | @@ -8,7 +8,10 @@ |
| 8 | 8 |
<!-- 주소록 목록 조회 --> |
| 9 | 9 |
<select id="AddrDAO.selectAddrList" parameterClass="addrVO" resultClass="addrVO"> |
| 10 | 10 |
/* AddrDAO.selectAddrList */ |
| 11 |
- SELECT |
|
| 11 |
+ SELECT |
|
| 12 |
+ /* |
|
| 13 |
+ 1 AS totCnt |
|
| 14 |
+ */ |
|
| 12 | 15 |
COUNT(1) OVER() AS totCnt |
| 13 | 16 |
,A.ADDR_ID AS addrId |
| 14 | 17 |
,A.ADDR_GRP_ID AS addrGrpId |
... | ... | @@ -56,9 +59,19 @@ |
| 56 | 59 |
</iterate> |
| 57 | 60 |
</isNotEmpty> |
| 58 | 61 |
|
| 59 |
- <isNotEmpty property="addrGrpId"> |
|
| 60 |
- AND A.ADDR_GRP_ID = #addrGrpId# |
|
| 61 |
- </isNotEmpty> |
|
| 62 |
+ AND A.ADDR_GRP_ID in ( |
|
| 63 |
+ select addr_grp_id |
|
| 64 |
+ from mj_addr_grp |
|
| 65 |
+ where 1=1 |
|
| 66 |
+ <isNotEmpty property="mberId"> |
|
| 67 |
+ AND MBER_ID = #mberId# |
|
| 68 |
+ </isNotEmpty> |
|
| 69 |
+ <isNotEmpty property="addrGrpId"> |
|
| 70 |
+ AND ADDR_GRP_ID = #addrGrpId# |
|
| 71 |
+ </isNotEmpty> |
|
| 72 |
+ ) |
|
| 73 |
+ |
|
| 74 |
+ |
|
| 62 | 75 |
<isNotEmpty property="searchKeyword"> |
| 63 | 76 |
<isEqual property="searchCondition" compareValue=""> |
| 64 | 77 |
AND ( A.ADDR_PHONE_NO LIKE CONCAT ('%', #searchKeyword#,'%')
|
... | ... | @@ -145,6 +158,121 @@ |
| 145 | 158 |
</isNotEmpty> |
| 146 | 159 |
LIMIT #recordCountPerPage# OFFSET #firstIndex# |
| 147 | 160 |
</select> |
| 161 |
+ |
|
| 162 |
+ <!-- 주소록 목록 조회 --> |
|
| 163 |
+ <select id="AddrDAO.selectAddrListCount" parameterClass="addrVO" resultClass="int"> |
|
| 164 |
+ /* AddrDAO.selectAddrListCount */ |
|
| 165 |
+ SELECT |
|
| 166 |
+ COUNT(1) AS totCnt |
|
| 167 |
+ FROM |
|
| 168 |
+ MJ_ADDR A |
|
| 169 |
+ LEFT OUTER JOIN |
|
| 170 |
+ MJ_ADDR_TRANS_HIST C |
|
| 171 |
+ ON |
|
| 172 |
+ A.ADDR_GRP_ID = C.ADDR_GRP_ID |
|
| 173 |
+ WHERE 1=1 |
|
| 174 |
+ <isNotEmpty property="mberId"> |
|
| 175 |
+ AND A.MBER_ID = #mberId# |
|
| 176 |
+ </isNotEmpty> |
|
| 177 |
+ |
|
| 178 |
+ AND (C.RECV_STATUS = 'Y' OR C.RECV_STATUS IS NULL) |
|
| 179 |
+ |
|
| 180 |
+ <isNotEmpty property="addrIdList"> |
|
| 181 |
+ <iterate prepend="AND A.ADDR_ID IN " open="(" close=")" conjunction="," property="addrIdList">
|
|
| 182 |
+ #addrIdList[]# |
|
| 183 |
+ </iterate> |
|
| 184 |
+ </isNotEmpty> |
|
| 185 |
+ |
|
| 186 |
+ AND A.ADDR_GRP_ID in ( |
|
| 187 |
+ select addr_grp_id |
|
| 188 |
+ from mj_addr_grp |
|
| 189 |
+ where 1=1 |
|
| 190 |
+ <isNotEmpty property="mberId"> |
|
| 191 |
+ AND MBER_ID = #mberId# |
|
| 192 |
+ </isNotEmpty> |
|
| 193 |
+ <isNotEmpty property="addrGrpId"> |
|
| 194 |
+ AND ADDR_GRP_ID = #addrGrpId# |
|
| 195 |
+ </isNotEmpty> |
|
| 196 |
+ ) |
|
| 197 |
+ |
|
| 198 |
+ <isNotEmpty property="searchKeyword"> |
|
| 199 |
+ <isEqual property="searchCondition" compareValue=""> |
|
| 200 |
+ AND ( A.ADDR_PHONE_NO LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 201 |
+ OR A.ADDR_NM LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 202 |
+ ) |
|
| 203 |
+ </isEqual> |
|
| 204 |
+ <isEqual property="searchCondition" compareValue="1"> |
|
| 205 |
+ AND A.ADDR_PHONE_NO LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 206 |
+ </isEqual> |
|
| 207 |
+ <isEqual property="searchCondition" compareValue="2"> |
|
| 208 |
+ AND A.ADDR_NM LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 209 |
+ </isEqual> |
|
| 210 |
+ <isEqual property="searchCondition" compareValue="3"> |
|
| 211 |
+ AND A.MBER_ID LIKE CONCAT ('%', #searchKeyword#,'%')
|
|
| 212 |
+ </isEqual> |
|
| 213 |
+ </isNotEmpty> |
|
| 214 |
+ <isNotEmpty property="searchAddrGrpId"> |
|
| 215 |
+ <isEqual property="searchAddrGrpId" compareValue="bookmark"> |
|
| 216 |
+ AND A.BOOKMARK = 'Y' |
|
| 217 |
+ </isEqual> |
|
| 218 |
+ <isNotEqual property="searchAddrGrpId" compareValue="bookmark"> |
|
| 219 |
+ <isEqual property="searchAddrGrpId" compareValue="noGrp"> |
|
| 220 |
+ AND A.ADDR_GRP_ID = '0' AND A.BOOKMARK = 'N' |
|
| 221 |
+ </isEqual> |
|
| 222 |
+ <isNotEqual property="searchAddrGrpId" compareValue="noGrp"> |
|
| 223 |
+ AND A.ADDR_GRP_ID = #searchAddrGrpId# |
|
| 224 |
+ </isNotEqual> |
|
| 225 |
+ </isNotEqual> |
|
| 226 |
+ </isNotEmpty> |
|
| 227 |
+ <isEqual property="startKeyword" compareValue="1"> |
|
| 228 |
+ AND (A.ADDR_NM RLIKE '^(ㄱ|ㄲ)' OR (A.ADDR_NM <![CDATA[>=]]> '가' AND A.ADDR_NM <![CDATA[<]]> '나')) |
|
| 229 |
+ </isEqual> |
|
| 230 |
+ <isEqual property="startKeyword" compareValue="2"> |
|
| 231 |
+ AND (A.ADDR_NM RLIKE '^(ㄴ)' OR (A.ADDR_NM <![CDATA[>=]]> '나' AND A.ADDR_NM <![CDATA[<]]> '다')) |
|
| 232 |
+ </isEqual> |
|
| 233 |
+ <isEqual property="startKeyword" compareValue="3"> |
|
| 234 |
+ AND (A.ADDR_NM RLIKE '^(ㄷ|ㄸ)' OR (A.ADDR_NM <![CDATA[>=]]> '다' AND A.ADDR_NM <![CDATA[<]]> '라')) |
|
| 235 |
+ </isEqual> |
|
| 236 |
+ <isEqual property="startKeyword" compareValue="4"> |
|
| 237 |
+ AND (A.ADDR_NM RLIKE '^(ㄹ)' OR (A.ADDR_NM <![CDATA[>=]]> '라' AND A.ADDR_NM <![CDATA[<]]> '마')) |
|
| 238 |
+ </isEqual> |
|
| 239 |
+ <isEqual property="startKeyword" compareValue="5"> |
|
| 240 |
+ AND (A.ADDR_NM RLIKE '^(ㅁ)' OR (A.ADDR_NM <![CDATA[>=]]> '마' AND A.ADDR_NM <![CDATA[<]]> '바')) |
|
| 241 |
+ </isEqual> |
|
| 242 |
+ <isEqual property="startKeyword" compareValue="6"> |
|
| 243 |
+ AND (A.ADDR_NM RLIKE '^(ㅂ|ㅃ)' OR (A.ADDR_NM <![CDATA[>=]]> '바' AND A.ADDR_NM <![CDATA[<]]> '사')) |
|
| 244 |
+ </isEqual> |
|
| 245 |
+ <isEqual property="startKeyword" compareValue="7"> |
|
| 246 |
+ AND (A.ADDR_NM RLIKE '^(ㅅ|ㅆ)' OR (A.ADDR_NM <![CDATA[>=]]> '사' AND A.ADDR_NM <![CDATA[<]]> '아')) |
|
| 247 |
+ </isEqual> |
|
| 248 |
+ <isEqual property="startKeyword" compareValue="8"> |
|
| 249 |
+ AND (A.ADDR_NM RLIKE '^(ㅇ)' OR (A.ADDR_NM <![CDATA[>=]]> '아' AND A.ADDR_NM <![CDATA[<]]> '자')) |
|
| 250 |
+ </isEqual> |
|
| 251 |
+ <isEqual property="startKeyword" compareValue="9"> |
|
| 252 |
+ AND (A.ADDR_NM RLIKE '^(ㅈ|ㅉ)' OR (A.ADDR_NM <![CDATA[>=]]> '자' AND A.ADDR_NM <![CDATA[<]]> '차')) |
|
| 253 |
+ </isEqual> |
|
| 254 |
+ <isEqual property="startKeyword" compareValue="10"> |
|
| 255 |
+ AND (A.ADDR_NM RLIKE '^(ㅊ)' OR (A.ADDR_NM <![CDATA[>=]]> '차' AND A.ADDR_NM <![CDATA[<]]> '카')) |
|
| 256 |
+ </isEqual> |
|
| 257 |
+ <isEqual property="startKeyword" compareValue="11"> |
|
| 258 |
+ AND (A.ADDR_NM RLIKE '^(ㅋ)' OR (A.ADDR_NM <![CDATA[>=]]> '카' AND A.ADDR_NM <![CDATA[<]]> '타')) |
|
| 259 |
+ </isEqual> |
|
| 260 |
+ <isEqual property="startKeyword" compareValue="12"> |
|
| 261 |
+ AND (A.ADDR_NM RLIKE '^(ㅌ)' OR (A.ADDR_NM <![CDATA[>=]]> '타' AND A.ADDR_NM <![CDATA[<]]> '파')) |
|
| 262 |
+ </isEqual> |
|
| 263 |
+ <isEqual property="startKeyword" compareValue="13"> |
|
| 264 |
+ AND (A.ADDR_NM RLIKE '^(ㅍ)' OR (A.ADDR_NM <![CDATA[>=]]> '파' AND A.ADDR_NM <![CDATA[<]]> '하')) |
|
| 265 |
+ </isEqual> |
|
| 266 |
+ <isEqual property="startKeyword" compareValue="14"> |
|
| 267 |
+ AND (A.ADDR_NM RLIKE '^(ㅎ)' OR (A.ADDR_NM <![CDATA[>=]]> '하' AND A.ADDR_NM <![CDATA[<=]]> '힣')) |
|
| 268 |
+ </isEqual> |
|
| 269 |
+ <isEqual property="startKeyword" compareValue="a"> |
|
| 270 |
+ AND (A.ADDR_NM <![CDATA[>=]]> 'a' AND A.ADDR_NM <![CDATA[<=]]> 'z') |
|
| 271 |
+ </isEqual> |
|
| 272 |
+ <isEqual property="startKeyword" compareValue="0"> |
|
| 273 |
+ AND (A.ADDR_NM <![CDATA[>=]]> '0' AND A.ADDR_NM <![CDATA[<=]]>'9') |
|
| 274 |
+ </isEqual> |
|
| 275 |
+ </select> |
|
| 148 | 276 |
|
| 149 | 277 |
<!-- 주소록 목록 조회(속도개선) --> |
| 150 | 278 |
<select id="AddrDAO.selectAddrNewList" parameterClass="addrVO" resultClass="addrVO"> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?