
08-08 database 에서
Q1.
지금 코드의 진행과정에서, 하나의 키워드를 각각 name 과 userid 값으로 넣어주고 있어. 즉, name의 값이 있으면, userid에도 똑같은 값이 있고, name의 값이 없으면, userid도 똑같이 값이 없어.
이런 상황에서,
"<if test = 'name != null'>name LIKE CONCAT ('%', #{name}, '%')</if> " + "<if test = 'userid != null'>OR userid LIKE CONCAT ('%', #{userid}, '%')</if> " +
이 조건에 name 과 userid에 값이 "교수이름" 으로 할당되었다고 쳤을때, 이건 or 연산자이기 때문에 둘 중 하나라도 걸리는 값이 있다면 출력하게 되는 것이지?
A1.
네, 맞습니다.
주어진 코드에서 name과 userid에 모두 "교수이름"이라는 값이 할당되어 있고, 두 값이 null이 아니므로 <if> 조건 내부의 SQL 구문이 모두 포함됩니다. 따라서 최종적인 SQL 조건은 다음과 같습니다:
name LIKE CONCAT('%', #{name}, '%') OR userid LIKE CONCAT('%', #{userid}, '%')
이때 OR 연산자를 사용하였기 때문에 name 칼럼이나 userid 칼럼 중 하나라도 "교수이름"을 포함하고 있다면 해당 레코드가 조회 결과에 포함됩니다.
따라서, 둘 중 하나만 조건에 만족하더라도 결과가 출력되며, 현재 상황에서는 두 칼럼 모두 같은 값을 가지므로 name과 userid 중 어느 칼럼이든 조건에 맞는 레코드가 반환됩니다.
'오답노트 및 하다 막힌 부분 > Spring' 카테고리의 다른 글
| char 타입의 변수를 String으로 바꾸었을 때. (1) | 2024.11.14 |
|---|---|
| 로그인 갱신시간 (0) | 2024.11.12 |
| 타임리프로 fragment 경로 잡아줄 때 { 뒤에 바로 슬래시 (0) | 2024.11.08 |
| 08-11 FileHelper에서 return null (0) | 2024.11.05 |
| Spring으로 파일 업로드시, @Value로 주소 설정 오류의 경우 (0) | 2024.11.04 |