오답노트 및 하다 막힌 부분/Spring

mapper에서 조건태그로 sql 구문 만들기

Dr.Mlem 2024. 11. 9. 18:26

08-08 database의 ProfessorMapper + 코파일럿 QnA

 

 

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 중 어느 칼럼이든 조건에 맞는 레코드가 반환됩니다.