Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jquery
- db
- 자바
- pagenation
- spring
- ORDERBY
- html5
- poi
- 자바파일업로드
- 게시판구현
- CSS3
- MariaDB
- crud
- mysql
- poi엑셀
- 스프링
- 페이징
- mybatis
- Java
- 자바타입
- 자바스크립트
- insert
- jsp
- PAGING
- 스프링파일업로드
- 퍼블리싱
- select
- 파일업로드
- JSTL
- SQL
Archives
- Today
- Total
째의 개발 기록방
[MyBatis/MariaDB] 조건으로 검색 기능 구현하기 2 본문
앞단과 서버단은 아래링크에!!
2021.11.05 - [분류 전체보기] - [Java/Spring] 조건으로 검색 기능 구현하기
[Java/Spring] 조건으로 검색 기능 구현하기
▶ 검색타입과 정렬타입/정렬방식을 기준으로 검색하기 위의 화면처럼 검색타입과 정렬타입/정렬방식을 기준으로 검색 기능을 구현해보았다. jsp (front) 검색 --전체보기-- selected >제목 selected >내
zzecoding.tistory.com
- mapper.xml
<sql id="reportSqlId">
<![CDATA[
SELECT /*******reportSqlId******/
A.REPORT_ID AS reportId
,A.REPORT_TITLE AS reportTitle
,A.REPORT_TYPE AS reportType
,A.REPORT_CONTENT AS reportContent
,A.OKAY_YN AS okayYn
,A.ORDER_BY_TOP AS orderByTop
,A.ORDER_BY_ROW AS orderByRow
,A.START_DATE AS startDate
,A.END_DATE AS endDate
,A.REG_ID AS regId
,( SELECT ADMIN_LOGIN_ID FROM ADMIN_USER U WHERE A.REG_ID = U.ADMIN_ID) AS regIdStr
,A.REG_DT AS regDt
,DATE_FORMAT(A.REG_DT,'%Y-%m-%d %H:%i:%S') AS regDtStr
,A.MOD_ID AS modId
,( SELECT ADMIN_LOGIN_ID FROM ADMIN_USER U WHERE A.MOD_ID = U.ADMIN_ID) AS modIdStr
,A.MOD_DT AS modDt
,DATE_FORMAT(A.MOD_DT,'%y-%m-%d') AS modDtStr
,B.FILE_ID AS fileId
,B.FILE_NM AS fileNm
,B.FILE_PATH AS filePath
,B.FILE_ORG_NM AS fileOrgNm
,B.REG_ID AS regId
,( SELECT ADMIN_LOGIN_ID FROM ADMIN_USER U WHERE B.REG_ID = U.ADMIN_ID) AS regIdStr
,B.REG_DT AS regDt
,DATE_FORMAT(B.REG_DT,'%Y-%m-%d-%H:%i') AS regDtStr
,B.MOD_ID AS modId
,( SELECT ADMIN_LOGIN_ID FROM ADMIN_USER U WHERE B.MOD_ID = U.ADMIN_ID) AS modIdStr
,B.MOD_DT AS modDt
,DATE_FORMAT(B.MOD_DT,'%Y-%m-%d-%H:%i') AS modDtStr
FROM DAILY_REPORT A
LEFT OUTER JOIN DAILY_REPORT_FILE B
ON A.REPORT_ID = B.REPORT_ID
WHERE 1=1
]]>
</sql>
↑↑↑↑↑include refid 부분
<select id="selectPageReportList" parameterType="vo.ReportVO" resultMap="report">
<include refid="reportSqlId"></include>
<if test="selectTxt != null and selectTxt != '' ">
<if test="searchType != null and searchType != '' ">
<choose>
<when test="searchType == 'reportTitle' ">
AND REPORT_TITLE LIKE CONCAT ('%', #{selectTxt}, '%')
</when>
<when test="searchType == 'reportContent' ">
AND REPORT_CONTENT LIKE CONCAT ('%', #{selectTxt}, '%')
</when>
<otherwise>
</otherwise>
</choose>
</if>
</if>
AND A.REPORT_ID > 0
ORDER BY
<choose>
<when test='orderByType == "regId" '>
A.REG_ID
</when>
<when test='orderByType == "reportTitle" '>
A.REPORT_TITLE
</when>
<when test='orderByType == "regDt" '>
A.REG_DT
</when>
<otherwise>
A.REG_DT
</otherwise>
</choose>
<choose>
<when test='orderBy == "orderByRow" '>
DESC
</when>
<when test='orderBy == "orderByTop" '>
ASC
</when>
<otherwise>
ASC
</otherwise>
</choose>
<!-- ORDER BY A.REPORT_ID DESC -->
LIMIT #{startRow}, #{pageSize}
</select>
MYBATIS ORDER BY 문법을 잘 몰라서 애먹은 부분 ㅠㅠ..
어찌저찌 에러는 안나게 했었으나 알고보니 조건절이 잘못되어있었다...!
(경우의 수가 너무 많아지는, 리팩토링이 필요한 조건문이였다.)
<if test="selectTxt != null and selectTxt != '' ">
<if test="searchType != null and searchType != '' ">
<choose>
<when test="searchType == 'reportTitle' ">
AND REPORT_TITLE LIKE CONCAT ('%', #{selectTxt}, '%')
</when>
<when test="searchType == 'reportContent' ">
AND REPORT_CONTENT LIKE CONCAT ('%', #{selectTxt}, '%')
</when>
<otherwise>
</otherwise>
</choose>
</if>
</if>
이 부분이 검색 쿼리 조건부분이다.
LIKE CONCAT 으로 검색어중 일치하는 부분까지 조회되게 작성하였다.
ORDER BY
<choose>
<when test='orderByType == "regId" '>
A.REG_ID
</when>
<when test='orderByType == "reportTitle" '>
A.REPORT_TITLE
</when>
<when test='orderByType == "regDt" '>
A.REG_DT
</when>
<otherwise>
A.REG_DT
</otherwise>
</choose>
<choose>
<when test='orderBy == "orderByRow" '>
DESC
</when>
<when test='orderBy == "orderByTop" '>
ASC
</when>
<otherwise>
ASC
</otherwise>
</choose>
<!-- ORDER BY A.REPORT_ID DESC -->
최종적으로 고친 ORDER BY 조건부분이다.
처음엔 두개를 같이 비교해야한다고 생각해서
<when test='orderByType == "regId" and orderBy == "orderByRow" '>이런식으로 했었지만
이렇게 하게되면 경우의 수가 너무 많아진다는걸 알게되었다.
결국은 타입별로 비교~!그 뒤에 정렬방식 비교 따로!
- 검색타입 : 제목
- 검색어 : 프론트
- 정렬타입 : 제목
- 정렬방식 : 오름차순
의 조건대로 검색화면이 잘 나온것을 확인할 수 있다.
※ 안에 데이터는 테스트용으로 마구잡이로 넣은거라 무시바람 ※
위와 같은 조건에 정렬방식만 내림차순으로 조회한 화면이다.
성공~!!

'Back End > SQL' 카테고리의 다른 글
[MyBatis/MySql] MyBatis 사용법, 서브쿼리 사용법 (0) | 2022.05.10 |
---|---|
[MyBatis/MariaDB] 그룹함수 / GROUP BY절 / HAVING절 (0) | 2022.01.04 |
[MyBatis/MariaDB] 페이징 구현하기 2 (0) | 2021.10.28 |
[MyBatis/MariaDB] LAST_INSERT_ID()와 WHERE 1=1에 대하여 (0) | 2021.10.21 |
[MyBatis/MariaDB] mapper.xml 문법 (0) | 2021.06.09 |