Q1.
<script>" +
"SELECT profno, name, userid, position, sal, DATE_FORMAT(hiredate, '%Y-%m-%d') as hiredate, comm, " +
"p.deptno as deptno, dname " +
"FROM professor p " +
"INNER JOIN department d ON p.deptno = d.deptno "+
"<where>" + "<if test = 'name != null'>name LIKE CONCAT ('%', #{name}, '%')</if> " +
"<if test = 'userid != null'>OR userid LIKE CONCAT ('%', #{userid}, '%')</if> " +
"</where>" + "ORDER BY profno DESC "+ // 이것과 이 아래 2줄 확인
"<if test = 'listCount > 0'>LIMIT #{offset}, #{listCount}</if>" +
"</script>"
이렇게 sql 구문을 짜는 것이, mybatis의 동적 sql 구문인가?
A1.
네, 맞습니다! 이 SQL 구문은 MyBatis의 동적 SQL 구문에 해당합니다. MyBatis에서는 <if>, <where>, <choose>, <when>, <otherwise>, <foreach> 등과 같은 태그를 사용하여 SQL 문장을 동적으로 구성할 수 있습니다. 질문에 있는 코드를 살펴보면 다음과 같은 MyBatis 동적 SQL 요소들이 사용되었습니다:
- <where>:
- <where> 태그는 조건을 동적으로 추가할 때 유용합니다. 이 태그 내부에서 여러 <if> 조건을 작성할 수 있고, 조건이 하나라도 충족되면 WHERE 키워드가 자동으로 추가됩니다.
- <if>:
- <if test="..."> 태그는 특정 조건에 따라 SQL 문이 포함될지 여부를 결정합니다.
- 예를 들어, name 값이 null이 아닐 경우 name LIKE CONCAT ('%', #{name}, '%') 조건이 추가됩니다.
- 조건이 여러 개 존재할 경우, 적절히 AND 또는 OR 조건을 함께 사용하여 원하는 논리 구조를 만들어야 합니다.
- LIMIT 및 ORDER BY:
- ORDER BY와 LIMIT 조건은 동적으로 페이징을 처리하는 데 자주 사용됩니다. 여기서도 <if> 문을 통해 listCount 값이 0보다 클 경우에만 LIMIT 구문을 추가하여 필요한 개수만큼의 데이터를 가져올 수 있도록 설정하고 있습니다.
예시 코드 요약
이 코드는 professor 테이블과 department 테이블을 조인한 후, name 또는 userid가 특정 값을 포함하는 교수 목록을 검색하고, profno 기준으로 내림차순 정렬하여 출력하는 구조입니다. 또한, 페이징을 위해 LIMIT 구문을 활용하고 있습니다.
따라서 결론적으로, 이 코드에서 사용된 <if>와 <where> 태그를 통해 MyBatis의 동적 SQL 구문을 작성한 것이 맞습니다.
'언어 및 도구들 공부 > Spring' 카테고리의 다른 글
Select sql 구문 수행시 Resultmap의 모든 컬럼을 사용하지 않으면? (0) | 2024.11.13 |
---|---|
Spring MVC 패턴에서 컨트롤러 메서드와 view의 데이터 주고받기 (1) | 2024.11.12 |
업로드한 파일의 경로만 있고 사진 원본이 없으면? (1) | 2024.11.08 |
Thumbnailator의 useExifOrientation() 메서드 (0) | 2024.11.05 |
프론트엔드와 백엔드로 분리되어 조합된 프로젝트? (1) | 2024.11.03 |