Spring 서버를 실행할 때마다 초기 SQL을 자동으로 실행해 DB 스키마 및 초기 데이터 세팅을 할 수 있습니다. (주로 개발 단계에서 사용)
| 속성 | 설명 | 예시 |
|---|---|---|
spring.sql.init.mode | 초기 SQL 실행 모드 설정 | always : 사용 / never : 미사용(또는 생략) |
spring.sql.init.schema-locations | DDL(SQL 스키마) 파일 경로 | classpath:/sql/schema.sql |
spring.sql.init.data-locations | DML(SQL 데이터) 파일 경로 | classpath:/sql/data.sql |
👉 classpath: 프로젝트 내 resources 폴더를 의미합니다.
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:/sql/schema.sql
spring.sql.init.data-locations=classpath:/sql/data.sql
MyBatis는 SQL과 Java 객체를 매핑(Mapping)해 쉽게 데이터베이스를 사용할 수 있도록 도와주는 프레임워크입니다.
| 작성 방식 | 설명 |
|---|---|
| 어노테이션 기반 | 추상 메서드에 직접 SQL을 작성 (간단한 CRUD용) |
| XML 기반 | 별도의 Mapper XML 파일에 SQL 작성 (복잡한 SQL, 동적 쿼리용) |
XML은 데이터를 저장, 전달, 교환하기 위한 마크업 언어입니다.
mybatis.mapper-locations=classpath:/mapper/*.xml
(*은 해당 폴더 내 모든 XML 파일을 의미)
<mapper namespace="example.day13.XmlMapper">
<!-- 여기 내부에 SQL(DML) 작성 -->
</mapper>
<insert id="추상메소드명"
parameterType="매개변수경로 || 타입명(생략 가능)"
resultType="반환타입경로 || 타입명(생략 가능)"
useGeneratedKeys="true" keyProperty="PK컬럼명">
<!-- SQL 작성 -->
</insert>
설명:
useGeneratedKeys="true": 자동 생성된 PK 값을 DTO에 저장해 반환int 반환값은 실행된 레코드 수복잡한 조건문이나 반복문을 SQL에 적용할 때 동적 쿼리를 사용합니다.
| 구분 | 설명 | 예시 |
|---|---|---|
| 어노테이션 방식 | @Select, @Insert 등 안에 <script> 사용 | <script> ... </script> |
| XML 방식 | XML 내부에서 SQL 작성 | <if>, <foreach> 활용 |
<if test="조건문">
<!-- test의 조건이 참일 경우 실행될 SQL -->
</if>
<foreach collection="컬렉션명" item="반복변수명" separator=",">
<!-- 반복 실행될 SQL -->
</foreach>