일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트
- Linux
- String클래스
- 프로그래머스 SQL
- 클래스
- 예외처리
- 프론트엔드
- 프로그래밍
- sql문
- 백엔드
- 프로그래머스 sql 고득점 kit
- 메서드
- 웹개발
- 리눅스
- SQL
- StringBuilder
- order by
- github
- where
- 정보처리기사
- Java
- 자바
- 정보처리기사필기요약
- JavaScript
- 개발자
- 형변환
- 데이터 조회
- html
- BufferedReader
- mybatis
- select문
- 백준
- 입출력
- select
- MySQL
- 스프링
- Git
- scanner
- DML
- 알고리즘
- Today
- Total
ToBe끝판왕
[ MyBatis ] 마이바티스 동적쿼리 본문
MyBatis 프레임워크 - 동적쿼리
■ MyBatis
- 개발자들이 SQL 쿼리를 쉽게 작성하고 관리할 수 있도록 도와주는 퍼시스턴스 프레임워크입니다.
- SQL 쿼리와 프로그래밍 코드를 분리 및 관리 가능하여 코드의 가독성과 재사용성을 높이고 유지 보수를 용이하게 합니다.
- JDBC 코드의 복잡성을 추상화하고 SQL 쿼리의 실행 결과와 자바 객체에 매핑하기 위한 강력한 매핑 기능을 제공합니다.
1) MyBatis 동적쿼리란 ?
• SQL 쿼리를 동적으로 생성
- 다양한 검색 조건 처리 가능함
- 실행 시점에 필요한 부분만 생성하여 실행
2) MyBatis 동적쿼리의 중요 요소와 예시
• if
- 특정 조건에 따라 SQL 문장의 일부를 포함하거나 제외 가능토록 하는 태그
- test 속성 : test 속성의 조건값이 참이라면 if 블록내의 SQL이 실행된다.
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUsers" resultType="com.example.domain.User">
SELECT * FROM users
<where>
<if test="name != null and name != ''">
name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
<order by="id">
</select>
</mapper>
• choose / when / otherwise
- 여러개의 조건 중 하나를 선택하여 SQL 생성하게 하는 태그
- < choose > : 여러개의 < when > 중에서 조건에 맞는 하나를 선택하여 실행
- < when test=" " > : 특정조건이 충족될 때, 수행되는 SQL
- < otherwise > : < when > 구문 중 어떤 것도 충족되지 않을 때 실행되는 SQL
<choose>
<when test="type == 'A'">
AND type = 'A'
</when>
<when test="type == 'B'">
AND type = 'B'
</when>
<otherwise>
AND type IS NULL
</otherwise>
</choose>
• foreach
- List 나 Map과 같은 컬렉션을 반복하여 SQL 생성
- 주로 반복적인 구문을 처리할 때 사용된다.
- collection 속성 : 반복문에 사용할 컬렉션 지정 ( 필수 )
- item 속성 : 반복문에서 사용할 아이템 이름 설정
- separator 속성 : 요소들 사이마다 구분자 지정
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="name != null and name != ''">
name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="age != null">
AND age = #{age}
</if>
<if test="roles != null and roles.size > 0">
AND id IN
<foreach collection="roles" item="role" separator=",">
#{role}
</foreach>
</if>
</where>
ORDER BY id
</select>
• include
- 하나의 SQL 구문을 여러 SQL 매퍼에 재사용할 수 있도록 하는 기능
- 중복 코드를 줄이고 가독성과 유지보수성을 높이는데 도움이 된다.
- refid 속성 : 재사용할 SQL을 정의한 id값을 지정 ( id는 중복되지 않아야 한다. )
<mapper namespace="com.example.mapper.UserMapper">
<sql id="commonColumns">
id, name, age
</sql>
<select id="selectUserById" resultType="User">
SELECT <include refid="commonColumns" />
FROM users
WHERE id = #{userId}
</select>
<select id="selectUsersByName" resultType="User">
SELECT <include refid="commonColumns" />
FROM users
WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
</mapper>
• <![CDATA[ ]]>
- 쿼리문에서 비교연산자나 부등호를 사용할 경우 '>', '=', '<', '&'.. 태그인지 실제 쿼리에 필요한 연산자나 부등호인지 알수없음
- XML안의 특수문자로 인한 파싱 오류를 방지하기 위해 사용
- <![CDATA[ ]]> 태그를 사용하면 동적쿼리를 사용할 수 없게된다. 동적쿼리와 <![CDATA[ ]]> 태그를 함께 사용하고 싶은 경우 쿼리문 전체를 감싸지 않고, 특수문자가 있는 코드만 감싸주면 된다.
<select id="getEmployee" resultType="EmployeeVO">
SELECT *
FROM EMPLOYEES
WHERE 1=1 AND
<![CDATA[
SALARY > 2000
]]>
</select>
'■ 프로그래밍 SKILLS > MYBATIS , JPA' 카테고리의 다른 글
[ JPA ] JPA 개념 / 사용 이유 / 장단점 (0) | 2022.05.30 |
---|