2022. 3. 10. 22:48ㆍJava/Spring
1. Spring Starter Project 생성
next를 누르면 스프링 부트 의존성 설정을 해야한다.
이렇게 설정을 해준다.
라이브러리의 다운로드가 완료되고 board 프로젝트가 생성된 후에 build.gradle 파일을 열면 위에서 선택한 라이브러리들이 추가되어 있는 것을 알 수 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
implementation 'mysql:mysql-connector-java:8.0.15'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
1-2. 데이터베이스 연결
스프링에서 데이터 소스를 처리하기 위해서는 두 방식을 사용합니다.
1. application.properties를 이용하여 설정
2. @Bean 어노테이션을 이용하여 설정
저는 application.properties를 이용하여 설정하도록 하겠습니다.
application.properties의 위치는 src/main/resources에 있습니다.
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.username=root
spring.datasource.hikari.password=1234
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost/board?serverTimezone=UTC&useSSL=false
마지막줄에서 jdbc:mysql://localhost/스키마이름?serverTimezone=UTC&useSSL=false로 합니다. 저는 스키마의 이름을 board로 하여 만들었습니다.
application.properties설정이 끝났으면 src/main/java/board 패키지 밑에 configuration 패키지를 생성하고 DatabaseConfiguration 클래스를 만듭니다.
DatabaseConfiguration 클래스를 아래와 같이 작성해줍니다.
package board.configuration;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@PropertySource("classpath:/application.properties")
public class DatabaseConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() throws Exception {
DataSource dataSource = new HikariDataSource(hikariConfig());
System.out.println(dataSource.toString());
return dataSource;
}
}
@PropertySource("classpath:/application.properties")코드의 의미는 application.properties를 사용할 수 있도록 설정 파일의 위치를 지정해 주는 코드입니다.
그리고 ConfigurationProperties 어노테이션에 prefix가 spring.datasource.hikari로 설정되어 있기 때문에 spring.datasource.hikari로 시작하는 설정을 이용하여 히카리CP의 설정 파일을 만듭니다.
앞에서 만든 히카리CP의 설정 파일을 이용하여 데이터베이스와 연결하는 데이터 소스를 작성합니다.
이렇게 하고 실행을 하였을 때 콘솔창에 HikariDataSource (HikariPool-1)이라고 출력이 나오는 것을 알 수 있습니다.
1-3. Mybatis 연동하기
Mybatis는 기존의 JDBC를 이용하여 개발하는 방식에 비해 개발자의 부담을 덜어 주고 생산성을 향상시켜 줍니다.
SQL을 XML 파일에 작성하여 SQL의 변환이 자유롭고 가독성이 좋다는 장점이 있습니다.
앞에서 만든 DatabaseConfiguration 클래스를 아래와 같이 수정합니다.
package board.configuration;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@PropertySource("classpath:/application.properties")
public class DatabaseConfiguration {
@Autowired
private ApplicationContext applicationContext;
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration mybatisConfig(){
return new org.apache.ibatis.session.Configuration();
}
@Bean
public DataSource dataSource() throws Exception {
DataSource dataSource = new HikariDataSource(hikariConfig());
System.out.println(dataSource.toString());
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); // 스프링-마이바티스는 SqlSessionFactory를 생성하기 위해 SqlSessionFactoryBean을 사용
sqlSessionFactoryBean.setDataSource(dataSource); // 데이터 소스 설정
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/sql-*.xml")); // 마이바티스 매퍼 파일의 위치를 설정함.
sqlSessionFactoryBean.setConfiguration(mybatisConfig());
return sqlSessionFactoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
spring-Mybatis에서는 SqlSessionFactory를 생성하기 위해서 SqlSessionFactoryBean을 사용합니다.
스프링이 아닌 단독 Mybatis만 사용하면 SqlSessionFactoryBuilder를 사용합니다.
이제 src/main/resources에 mapper패키지를 생성하도록 하겠습니다.
앞서 매퍼 파일의 위치를 classpath:/mapper/**/sql-*.xml로 지정을 하였습니다.
이 패턴은 resources폴더에 있는 mapper 폴더 밑의 이름이 sql-로 시작하고 확장자가 xml인 모든 파일을 의미합니다.
이제 Mybatis 연결을 확인하도록 하겠습니다.
src/test/java폴더 안에 있는 board패키지 안의 BoardApplicationTests 클래스를 아래와 같이 작성합니다.
package board;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class BoardApplicationTests {
@Autowired
private SqlSessionTemplate sqlSession;
@Test
public void contextLoads() {
}
@Test
public void testSqlSession() throws Exception {
System.out.println(sqlSession.toString());
}
}
그리고 BoardApplicationTests.java 파일을 우클릭하여 Run As에서 JUnit Test를 눌러서 테스트를 시작합니다.
org.mybatis.spring.SqlSessionTemplate@581918f6
다음과 같이 출력이 나오면 성공한 것입니다.
'Java > Spring' 카테고리의 다른 글
Spring boot를 이용한 게시판 만들기 - 유저, 게시물 엔티티 및 리포지토리 만들기(2) (2) | 2022.05.25 |
---|---|
Spring boot를 이용한 게시판 만들기 - JPA를 이용하여 데이터베이스 연결(1) (2) | 2022.05.17 |
Spring boot에서 Controller가 먹지 않는 에러 (0) | 2022.03.24 |
Spring boot 엔티티 매핑 (0) | 2022.03.21 |
Spring 개발환경 구축하기 (0) | 2022.01.26 |