Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

지석이의 일기

Spring Boot 프로젝트에 Mysql연결하기 본문

Java

Spring Boot 프로젝트에 Mysql연결하기

91년도에 철산에서 태어난 최지석 2022. 3. 17. 18:17

저번에 만든 SpringBoot 프로젝트와 MysqlDB를 서로 연결해보자.

 

1. 의존성 주입

의존성 주입을 위해 pom.xml을 수정해준다.

mysql 외에 mybatis를 사용하기위에 2개를 넣어준다.

 

https://mvnrepository.com/ 에서 검색하여, 제일 사용량이 많은걸로 해준다.

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency> 
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>

위 두개 의 dependency를 pom.xml에 넣어준다.

mysql-connector-java = JAVA 가 MySQL과 통신할 수 있게하는 드라이버
mybatis-spring-boot-starter = Spring Boot 용 Mybatis

 

넣고 maven update를 해준다.

 

 

2. 소스 수정 및 클래스 생성

그리고 mybatis와 db 환경 정보들을 입력하자.

application.properties에 두 정보들을 입력하자.

# database

spring.datasource.jdbc-url = jdbc:mysql://{DB_IP}:{DB_PORT}/{DBNAME}?serverTimezone=UTC&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8

spring.datasource.username= id

spring.datasource.password= passward

spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver

spring.datasource.mapper-locations: classpath:/mybatis/mapper/*.xml

# Mybatis mapper 위치 설정

mybatis.configuration.map-underscore-to-camel-case=true

mybatis.config-location = classpath:/mybatis/mybatis-config.xml

spring.datasource.jdbc-url 값뒤에 GET방식으로 붙히는 것들은 서버 환경설정값들인데, 한국에서 서비스할꺼면 기본적으로 넣어주자.

spring.datasource.mapper-locations 은 실제로 application.properties에서 인식되는 값이 아니고, 뒤에서 설정할 DBconfing 에서 사용할 변수이다.

DBconfing 는 꼭 만들어줘야 하기로 하자.

 

컨트롤러 생성해서 클라이언트에서 들어올 창구(?)를 만들자!

서비스 컨트롤러를 만들고, 이어서 인터페이스 맵퍼까지 만들어주자.

 클라이언트 요청-> 컨트롤러 -> 서비스 -> 맵퍼 -> DB -> 맵퍼 -> 서비스 -> 컨트롤러 -> 클라이언트 응답

이런순으로 하나의 트랜젝션이다. 

 

이후  SqlSessionFactory와 SessionTemplate을 생성해 줘야 하기때문에 DBconfigClass를 만들어줘야한다

@Configuration

@MapperScan(value = "com.marsPhoto.www.mapper.*", sqlSessionFactoryRef = "SqlSessionFactory")

public class DbConfig {

@Value("${spring.datasource.mapper-locations}")

String mPath;

// mybatis 설정 파일을 따로 작성해서 임포트할 예정 - snake_case -> camelCase 를 위함

@Value("${mybatis.config-location}")

String mybatisConfigPath;

@Bean(name = "dataSource")

@ConfigurationProperties(prefix = "spring.datasource")

public DataSource DataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "SqlSessionFactory")

public SqlSessionFactory SqlSessionFactory(@Qualifier("dataSource") DataSource DataSource, ApplicationContext applicationContext) throws Exception {

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

sqlSessionFactoryBean.setDataSource(DataSource);

sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources(mPath));

sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource(mybatisConfigPath));

return sqlSessionFactoryBean.getObject();

}

@Bean(name = "SessionTemplate")

public SqlSessionTemplate SqlSessionTemplate(@Qualifier("SqlSessionFactory") SqlSessionFactory firstSqlSessionFactory) {

return new SqlSessionTemplate(firstSqlSessionFactory);

}

 

@Value("${spring.datasource.mapper-locations}")은 위에 application.properties에서 호출해 온다.

 

해당 configClass까지 삽입하면 파일구조는다음과 같다

다음과 같은 구조에서 /mybatis/mapper/*.xml 중 하나 를보면

단순히 db가 연결된건지 확인 하는 것이라 dual에서 1을 찾아보자

DBconfig을 잊어버려 bean을 만들어주지 않으면 mapper에서 계속 null이 뜰것이다. 

 

3. 간단한 테스트!

해당 컨트롤러를 호출하여 select 1 from dual이 호출됬는지보자!

 이렇게 간단하게 mysql 을 연결하고 mybits 및 스프링 부트를 연동해 보았다.