[Spring Boot] 스프링부트 프로젝트 생성 및 MySQL, myBatis 연동

hjeu·2023년 2월 22일

졸업 프로젝트를 끝내고 제대로 공부를 해보기로 결정! "스프링부트 시작하기" 책을 보고 따라한 블로그가 있길래 나는 그 블로그를 보고 간단한 게시판을 만들어보고 추가로 원하는 기능을 더 개발할 생각이다!
일단 차근차근 써내려가 보려고 합니당

1. java & eclipse 설치

프로젝트 생성 전에 자바와 이클립스를 먼저 다운 받아야한다!

https://www.oracle.com/java/technologies/downloads/
여기에서 자바를 먼저 다운 받으면 된당!
단, 맥북 M1이면 무조건 자바 11버전 이상을 다운 받아야 함. 그 이하는 설치가 안됨.

https://www.eclipse.org/downloads/packages/
이클립스는 여기서 설치하면 됩니당.

2. 스프링 부트 프로젝트 생성


이클립스에서 File -> New -> Other... 클릭


Spring Boot -> Spring Starter Project -> Next


프로젝트 셋팅을 해준다. Maven 으로 할까 생각도 했는데 요즘에 Gradle을 많이 사용한다 하여 그냥 하던거 하기로 했다! 이번에도 게시판을 만들어볼 예정이라...저기서 -1 이거는 빼도 됨!


필요한 라이브러리를 선택한다. 프로젝트 생성 후 추가로 넣을 수 있음!

3. MySQL 연동


src/main/resources 아래에 application.properties에 아래 코드 입력

spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/board?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.hikari.username=사용자 아이디
spring.datasource.hikari.password=비밀번호
spring.datasource.hikari.connection-test-query=SELECT 1

localhost:3306/board? 이 부분에서 board는 데이터베이스 이름을 적어주면 됨
하기 전에 mysql에서 데이터베이스를 먼저 생성 해야함!

username은 mysql 사용자 아이디 ex)root
password는 mysql에서 설정했던 비밀번호를 넣으면 됨!


분명 board에 package를 만든건데 왜 저렇게 board 밖에 나왔는지는 모르겠음...
board.config 해야한다해서 저렇게 한건데 잘 된건지는 모르겠지만 일단 연동은 됐음!
저렇게 클래스도 만들어서

package board.configuration;
import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
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;
    }
}

요롷게 적는다.

  • @Configuration : 이 어노테이션은 @Bean 어노테이션을 사용하기 위해 작성해야한다.
  • @PropertySource("classpath:/application.properties") : application.properties를 설정 파일로 사용할 수 있도록 위치를 지정한다.
  • @ConfigurationProperties(prefix="spring.datasource.hikari") : application.properties에서 설정했던 데이터베이스 관련 정보를 사용하도록 지정한다. @ConfigurationProperties의 prefix가 hikari로 지정했으므로, spring.datasource.hikari로 시작하는 설정을 이용하여 hikari 설정 파일을 만든다.


실행 했을때 HikariDataSource (HikariPool-1) 이게 나오면 연동 성공!

4. myBatis 연동

앞에서 만든 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 DatabaseConfiguraion {

    @Autowired	//여기
    private ApplicationContext applicationContext;

    @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;
    }

    @Bean	//여기
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/*Mapper.xml"));

        return sqlSessionFactoryBean.getObject();
    }

    @Bean	//여기
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
  • SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean() : spring myBatis에서는 SqlSessionFactory를 생성하기 위해서는 SqlSessionFactoryBean을 사용한다고 한다. 만약 spring이 아닌 myBatis 단독으로 사용할 경우에는 SqlSessionFactoryBuilder를 사용한다.

mapper 폴더 생성


src/main/resources 아래에 mapper 폴더를 생성한다.

myBatis 연결 확인

myBatis 연결 확인을 위해 test 코드를 작성하여 실행을 한다.

src/test/java 밑에 board 패키지 아래에 있는 BoardApplicationTests.java 클래스에 작성을 한다.

package board;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;

@SpringBootTest
public class BoardApplicationTests {
	
	@Autowired
	private SqlSessionTemplate sqlSession;

	@Test
	public void contextLoads() {
	}
	
	@Test
	public void testSqlSession() throws Exception {
		System.out.println(sqlSession.toString());
	}

}

spring boot에 JUnit5가 설치되어 있어 JUnit으로 테스트를 한다.
실행을 해보면

이렇게 나오는데 중간 아래쯤에 org.mybatis.spring.SqlSessionTemplate@38022758 이렇게 나오면 연결에 성공한 것이다!

5. 느낀점

MySQL 연동할 때 데이터베이스를 먼저 생성을 안해서 잠깐 헤맸는데 그래도 다행히 순탄하게 지나갈 수 있었고, 졸업작품은 완전 급하게 했어서 자세히 공부를 하지를 못했는데 이번에 myBatis를 써볼려고 해서 기대가 된다. 친구가 이게 매우 좋다고 했기 때문에 더 그럴지도?!

profile
나는야 개발왕이 될거야! (๑ •̀ω•́)۶

0개의 댓글