지난 글에서 Spring initializr 로 Project 를 만들었다.
이제 본격적으로 설정을 해 볼 생각이다.
1. /home/계정명/private/study 폴더를 만들고 Spring initializr 로 만든 myproject.zip 을 옮기고 압축을 푼후
Intellj 로 open 했다.

2. Spring initializr 설정때 처음으로 maven 이 아닌 gradle 을 쓴다고 했는데 제대로 gradle 이 로딩 된듯 하다.
코끼리 마크가 보이고 화면에 별 다른 특이사항이 없다.

3. mybatis 설정을 시작 한다.
- src/main/resources 디렉토리 아래에 mybatis-config.xml 파일을 생성 한다.
- IntelliJ에서: File > New > File을 클릭하고 파일 이름을 mybatis-config.xml로 지정.
- 아래 형식으로 mybatis-config.xml 파일의 내용을 채운다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 캐시를 활성화 -->
<setting name="cacheEnabled" value="true"/>
<!-- 반환 시, 자동으로 키를 CamelCase로 변환 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 환경설정 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@<host>:<port>:<sid>"/>
<property name="username" value="<your-username>"/>
<property name="password" value="<your-password>"/>
</dataSource>
</environment>
</environments>
<!-- 매퍼 설정 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
나같은 경우에 oracle xe를 docker 로 띄웠고 띄울때 서비스네임을 'XEPDB1' 로 해서
sid를 멀 넣어야 하나 당황했는데, 챗gpt 에 물어보니 보통 orace xe 일 경우 "XE" 가 sid 라고 해서 "XE"로 설정 했다.
jdbc:oracle:thin:@localhost:1521:XE
resouces/mappers 폴더를 만들고 UserMapper.xml 도 추가 했다.
주요 항목:
- cacheEnabled: MyBatis에서 캐시 사용 여부 설정.
- mapUnderscoreToCamelCase: 데이터베이스 컬럼 이름을 Java 객체의 CamelCase 속성으로 매핑.
- environments: 데이터베이스 연결 정보를 설정.
- mappers: XML 매퍼 파일의 경로를 지정.
4. mapper.xml ( 여기서는 UserMapper.xml) 을 만들고 mapper.xml과 연결된 interface 파일을 만든다.
- mappers 안에 들어가는 UserMapper.xml 을 나의 프로젝트 구조에 맞게 생성한다.
namespace 정보가 Mapper 인터페이스와 일치해야 합니다.(중요함)
resulType 도 dto 안에 있는 패키지구조와 class 명과 일치 해야 함(중요함)
<?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="com.example.myproject.mapper.UserMapper">
<!-- 간단한 SELECT 예제 -->
<select id="getUserById" parameterType="int" resultType="com.example.myproject.dto.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
- UserMapper.xml 에 선언한 Mapper Interface 와 dto 를 xml에 선언한 내용과 일치 하게 파일 생성함.
package com.example.myproject.biz.mapper;
import com.example.myproject.biz.dto.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper // 이 어노테이션으로 MyBatis가 해당 인터페이스를 Mapper로 인식
public interface UserMapper {
User getUserById(@Param("id") int id); // 매퍼 XML에 정의된 SQL과 매핑되는 메서드
}
맨 천지가 annotation 천지백깔이다.
또 모르는 @Param 이라는 annotation을 만났는가?
@Param 이라는 annotation 은 UserMapper.xml 에서 #{} 붙는 녀석의 이름을 지정 하는것이다.
여기 예제는 그렇지 않다만
만약 @Param("idxxx") 라고 정하면 xml 에서 쿼리는 아래 처럼 바뀌어야 한다.
select *
from users
where id =#{idxxx}
- DTO 를 만든다.
package com.example.myproject.biz.dto;
import lombok.Data;
@Data
public class User {
private int id;
private String name;
private String email;
}
5. application.properties 를 설정 한다.
어떤 프로젝트는 applicaiton.properties 를 쓰고 어떤곳은 application.yml을 쓴다.
둘다 써도 되는데, 우선 순위는 applicaiton.properties가 더 앞이다.
설정이 복잡해지면 계층 구조로 보이게 하는것이 가독성이 좋아서
기존에 스프링들은 properties 하나만 썼는데 그후 yml 형식이 나온 것 이다.
spring.application.name=myproject
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=sys
spring.datasource.password=1234
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.mybatis.config-location=classpath:mybatis-config.xml
spring.mybatis.mapper-locations=classpath:mappers/*.xml
위처럼 설정 하고 나니 궁금해 졌다.
위에서 mybatis-config.xml 에도 db 정보 넣었는데,
또 applicaiton.properties.xml 에도 db정보를 넣어야 하나
조금 이상한데.
내 생각이 맞았다.
mybatis-config.xml 에는 db정보를 빼도 된다.
Spring Boot에서 MyBatis와의 결합
Spring Boot에서 MyBatis를 사용할 때는 mybatis-spring-boot-starter를 사용합니다.
- 이 경우 MyBatis의 DataSource 설정은 Spring Boot의 DataSource를 재사용하도록 설정됩니다.
- 따라서, mybatis-config.xml의 데이터베이스 설정은 무시되며, Spring Boot의 설정(application.properties)을 기준으로 동작합니다.
mybatis-config.xml의 역할
- SQL 매핑 관련 설정에만 집중하도록 사용됩니다.
- 예: 캐시 사용 여부, CamelCase 매핑 등
- 데이터베이스 설정은 Spring Boot에서 관리하며, MyBatis는 Spring Context의 DataSource를 사용합니다.
그래서 mybatis-config.xml 에서 enviorment 를 날렸다.
오늘은 이만..
다음편에 계속.
to be continue..
'SI 업무 > 나만의 프로젝트 만들기' 카테고리의 다른 글
| 5. RESTful 에러 잡기 1부 (0) | 2024.11.24 |
|---|---|
| 4. spring boot start with Postman (1) | 2024.11.23 |
| 2. Spring boot 프로젝트 만들기 with Spring initializr (0) | 2024.11.21 |
| 1-1. 우분투에 Intellij 바로가기 넣기 (1) | 2024.11.20 |
| 1. 우분투에 Intellij community 설치 하기 (2) | 2024.11.20 |