728x90
반응형
SMALL
MyBatis
객체지향 언어인 JAVA와 SQL Based인 관계형 데이터베이스(RDBMS) 프로그래밍을 쉽게 처리하기 위한 Persistence Framework의 일종이다.
장점
사용이 간단하고, 생산성이 높다.
- 쿼리의 재사용과 코드의 분리가 수월하다.
- 유지보수에 용이하다.
- 복잡한 쿼리나 다이나믹 쿼리에 강하다.
- resultType, resultClass 등 VO가 아닌, 사용자가 정의한 DTO, MAP 등으로 맵핑하여 사용할 수 있다.
기본 설정
Maven 사용 시 pom.xml에 MyBatis Dependency 설정이 필요하다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
개별 설정파일에 Property 설정 분리, 커넥션 풀 사용 설정이 필요하다
<properties resource="mybatis/config.properties">
<property name="username" value="honggildong"/>
<property name="password" value="1q2w3e"/>
</properties>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</datasource>
Mapper.xml 구성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="QnaRepository">
<select id="selectQnaList" parameterType="java.lang.String" resultType="com.project.qna.dto.QnaGetDto.class">
SELECT
qna_no,
qna_type_no,
qna_title,
qna_comment,
reg_id,
reg_Dt,
chg_id,
chg_dt
FROM qna
WHERE qna_no = #{qnaNo}
</select>
</mapper>
동적 SQL 처리
trim, if
<select id="selectQnaList" parameterType="java.lang.String" resultType="com.project.qna.dto.QnaGetDto.class">
SELECT
qna_no,
qna_type_no,
qna_title,
qna_comment,
reg_id,
reg_Dt,
chg_id,
chg_dt
FROM qna
<trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="qnaNo != null and qnaNo != ''">
AND qna_no = #{qnaNo}
</if>
<if test="qnaTypeNo != null and qnaTypeNo != ''">
AND qna_type_no = #{qnaTypeNo}
</if>
</trim>
ORDER BY qna_no
</select>
<update id="updateQna" parameterType="java.lang.Long">
UPDATE qna
<trim prefix="SET" suffixOverrides=",">
<if test="qnaTypeNo != null and qnaTypeNo != ''">
qna_type_no = #{qnaTypeNo},
</if>
<if test="qnaTitle != null and qnaTitle != ''">
qna_title = #{qnaTitle},
</if>
<if test="qna_comment != null and qna_comment != ''">
qna_comment = #{qna_comment},
</if>
</trim>
WHERE qna_no = #{qnaNo}
</update>
choose, when, oterwise
<select id="selectQnaList" parameterType="java.lang.String" resultType="com.project.qna.dto.QnaGetDto.class">
SELECT
qna_no,
qna_type_no,
qna_title,
qna_comment,
use_yn,
reg_id,
reg_Dt,
chg_id,
chg_dt
FROM qna
WHERE reg_dt BETWEEN '20190101' AND '20190501'
<when test="qnaNo != null and qnaNo !=''">
AND qna_no = #{qnaNo}
</when>
<when test="qnaTypeNo != null and qnaTypeNo !=''">
AND qna_type_no = #{qnaTypeNo}
</when>
<oterwise>
AND use_yn = 'Y'
</oterwise>
ORDER BY qna_no
</select>
foreach
<update id="deleteFile" parameterType="java.lang.Long">
UPDATE qna_file
SET use_yn = 'N'
WHERE qna_no = #{qnaNo}
AND file_no NOT IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</update>
자료참고
728x90
반응형
LIST
'Develope > Database' 카테고리의 다른 글
[DB] Database Index 인덱스 개념 (0) | 2022.08.31 |
---|---|
[JPA Test] JPA 연동 Test (0) | 2022.07.30 |
[Spring-Data-JPA] Auditing - Entity 공통 요소 자동 맵핑하기 (0) | 2022.07.30 |
[DB] Database Partitioning - DB 파티셔닝 개념 (0) | 2021.01.31 |
[MySQL Explain] 쿼리의 실행 계획 살펴보기 (0) | 2021.01.28 |