🧩 MyBatis & SQL DDL 정리
📘 MyBatis
🔹 MyBatis 사용법 - 어노테이션
- 인터페이스를 생성 후
@Mapper 어노테이션을 주입한다.
- SQL DML 어노테이션을 사용한다.
| 구문 | 어노테이션 | 예시 |
|---|
| INSERT | @Insert("SQL") | @Insert("INSERT INTO ...") |
| SELECT | @Select("SQL") | @Select("SELECT * FROM ...") |
| DELETE | @Delete("SQL") | @Delete("DELETE FROM ...") |
| UPDATE | @Update("SQL") | @Update("UPDATE ...") |
- SQL 내 매개변수는
#{매개변수}로 표현한다.
- 반환타입은 SQL 결과가 자동으로 매핑된다.
| 반환 타입 | 설명 |
|---|
int | Insert/Update/Delete에 의해 처리된 레코드 수 반환 |
Map / Dto / List | Select에 의해 조회된 레코드 반환 |
- Dto의 멤버변수명과 SQL의 속성명은 일치해야 한다.
- 생성된 PK값 매핑하기
@Options(useGeneratedKeys=true, keyProperty="PK속성명")
→ 반환값이 아닌 Dto 등 객체로 매핑됨
🔹 MyBatis 사용법 - XML
- 인터페이스를 생성 후
@Mapper 어노테이션을 주입한다.
application.properties에 설정을 추가한다.
mybatis.mapper-locations=classpath:/폴더명/파일명.xml
# *.xml : 모든 XML 파일 지칭
- 설정한 경로에 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 인터페이스 연동
<mapper namespace="인터페이스경로"> </mapper>
<mapper> 내부에 SQL 마크업 작성
| SQL 구문 | 태그 예시 |
|---|
| INSERT | <insert></insert> |
| SELECT | <select></select> |
| DELETE | <delete></delete> |
| UPDATE | <update></update> |
- SQL 마크업 속성 정리
| 속성명 | 설명 |
|---|
id | 인터페이스 내 추상메소드명 |
parameterType | 매개변수 타입 경로 (2개 이상일 경우 Dto로 묶거나 생략 가능) |
returnType | 반환타입 경로 (생략 가능) |
useGeneratedKeys / keyProperty | 생성된 PK값 매핑 |
{} | SQL 내부에서 Java 매개변수 대입 |
🔹 동적쿼리 (Dynamic SQL)
- SQL 실행 시점에 MyBatis가 제공하는 문법으로 SQL을 동적으로 구성
- 사용 위치
- 어노테이션:
<script> 내부
- XML:
<select> 등 DML 태그 내부
| 태그 | 설명 | 예시 |
|---|
<if> | 조건문 참일 때 SQL 실행 | <if test="조건문">SQL</if> |
<foreach> | 반복 SQL 생성 | <foreach collection="list" item="it" separator=",">#{it}</foreach> |
<where> | 조건절 자동 처리 | 여러 if 조건을 and/or로 연결 |
🔹 Spring SQL 자동 실행
| 파일명 | 용도 | 설명 |
|---|
schema.sql | DDL(SQL 정의) | 테이블 생성/삭제, 서버 실행 시 자동 실행 (DROP → CREATE 순서 중요) |
data.sql | DML(SQL 데이터) | 샘플 데이터 작성 |
⚙️ application.properties 설정
spring.sql.init.mode=always # always(사용) / never(미사용)
spring.sql.init.schema-locations=classpath:/폴더명/schema.sql
spring.sql.init.data-locations=classpath:/폴더명/data.sql
# classpath = resources 이하 경로
🧮 SQL - DDL
🔸 ALTER 문법 정리
| 기능 | SQL 예시 |
|---|
| 속성 추가 | ALTER TABLE 테이블명 ADD COLUMN 새로운속성명 타입; |
| 속성 수정 | ALTER TABLE 테이블명 MODIFY COLUMN 수정할속성명 타입; |
| 속성명 변경 | ALTER TABLE 테이블명 CHANGE COLUMN 수정할속성명 새로운속성명 타입; |
| 속성 삭제 | ALTER TABLE 테이블명 DROP COLUMN 삭제할속성명; |
| 테이블 속성 조회 | SHOW COLUMNS FROM 테이블명; |
| 제약조건 추가 | ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건; |
| 제약조건 삭제 | ALTER TABLE 테이블명 DROP PRIMARY KEY; ALTER TABLE 테이블명 DROP FOREIGN KEY FK명; ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명; |
| 제약조건 조회 | SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS; |
✅ 정리 요약
@Mapper는 인터페이스에 반드시 선언
- SQL은 어노테이션 또는 XML 방식으로 관리 가능
#{}는 MyBatis의 안전한 파라미터 바인딩 방식
schema.sql, data.sql은 개발 단계에서 자동 실행 가능
- DDL 수정 시
ALTER TABLE 구문 사용