728x90
* 스프링부트에서 MyBatis를 사용하기 위해 다음 dependency를 추가한다.
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
1. 데이터베이스 연결 정보 등록
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url = jdbc:postgresql://localhost:5432/postgres
spring.datasource.username = postgres
spring.datasource.password = 1234
- 다음과 같이 application.properties에 내가 연결하고 싶은 DB 정보 변수를 등록한다.
2. DataSource 빈 설정
@Configuration
public class DataSourceConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean(name="dataSource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
- MyBatis의 SqlSession을 생성할 때 데이터베이스 정보 객체인 DataSource가 필요하다.
- DataSource는 application.properties에 등록한 DB 정보를 가지고 생성한다.
- @ConfigurationProperties(prefix = "spring.datasource") 어노테이션을 특정 객체에 붙이면 application.properties 에 있는 "spirng.datasource" 로 시작하는 모든 변수의 값을 해당 객체에 바인딩 시킨다는 뜻이다.
3. MyBatis Mapper 설정
@Configuration
@MapperScan(basePackages="*")
public class MyBatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws IOException {
PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setConfigLocation(pmrpr.getResource("classpath:/config/sqlmap/sql-mapper-config.xml"));
sqlSessionFactoryBean.setMapperLocations(pmrpr.getResources("classpath:/config/sqlmap/mappers/*.xml"));
return sqlSessionFactoryBean;
}
@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
- MyBatis의 xml 문서 내 쿼리를 Mapper 인터페이스 내 정해둔 메소드로 이용하기 위해서는 SqlSession 객체가 필요하다. 위에서 등록한 DataSource를 가지고 SqlSession 빈을 생성하고 등록하는 코드이다.
- 등록된 SqlSession 빈이 쿼리를 모아놓은 xml 문서에서 원하는 쿼리를 호출하게 해주는 것이다.
- @MapperScan(basePackages=""): Mapper 인터페이스로 인식될 경로를 지정한다.
- sqlSessionFactoryBean.setConfigLocation(): MyBatis 부가 설정이 담긴 경로를 지정한다. 해당 파일에서 별칭 설정 등의 부가 설정이 가능하다.
- sqlSessionFactoryBean.setMapperLocations(): 실행될 쿼리들을 모아놓은 xml 파일을 지정한다. 보통 최상위 폴더까지 가서 *.xml로 지정한다.
- 이렇게 설정이 되어야 MyBatis를 사용할 수 있다.
4. MyBatis 부가 설정 파일 생성
<?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>
<typeAliases>
<typeAlias alias="boardMapper" type="egovframework.example.board.service.BoardMapper"/>
</typeAliases>
</configuration>
- MyBatis 부가 설정을 해주는 파일이다. 파일 이름은 보통 sql-mapper-config.xml이다.
- 쿼리를 모아놓은 xml 파일에서 사용할 별칭들을 설정할 수 있다. typeAliases를 통해 기다란 패키지에서 부터 클래스 까지의 경로를 변수 이름으로 설정한다.
5. 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="egovframework.example.board.service.BoardMapper">
<insert id="registBoard" parameterType="Map">
INSERT INTO BOARD(TITLE, WRITER, CONTENT, REG_DATE, COUNT)
VALUES(#{title}, #{writer}, #{content}, NOW(), 0)
</insert>
</mapper>
- Mapper 인터페이스에서 호출할 쿼리들을 작성한 xml 문서다.
- insert, select, update, delete 등 여러 쿼리를 등록하고 각 쿼리의 id 값은 Mapper 인터페이스 메소드 명과 일치시켜야 한다.
- 각 쿼리의 parameterType과 resultType 속성 값이 있는데 파라미터를 받을 때의 데이터 타입과 쿼리의 결과가 출력될 때의 데이터 타입을 지정한다.
6. Mapper 인터페이스 생성
@Mapper("boardMapper")
public interface BoardMapper {
void registBoard(Map<String, Object> board);
}
- 컨트롤러 및 서비스 단에서 호출할 메소드를 정의한다. 호출하고 싶은 쿼리의 id 값과 일치하도록 메소드를 생성하면 된다.
728x90
'웹개발 > Java, Spring' 카테고리의 다른 글
[Spring Boot] MyBatis SQL 쿼리 로그 설정 (0) | 2024.06.29 |
---|---|
[Spring Boot] Thymeleaf HTML 템플릿 수정 시 브라우저 반영 설정 (0) | 2024.06.26 |
[Spring Boot] 스프링 부트 JWT 인증 방식 구현 (0) | 2024.03.04 |
[Spring] PropertyPlaceholderConfigurer 클래스를 이용한 프로필 설정 파일 불러오기 (0) | 2023.08.20 |
[Java] 웹 내 TIF 이미지 → JPG 이미지로 변환하여 출력하는 방법 (0) | 2023.07.30 |