Dev.GA

[SpringBoot] Mybatis, MySQL연동하기 본문

Dev.Back-End/Spring Boot

[SpringBoot] Mybatis, MySQL연동하기

Dev.GA 2018. 5. 11. 09:40

[SpringBoot] Mybatis, MySQL연동하기



오늘은 지난번 Gradle을 이용한 Spring Boot프로젝트 생성에 이어서


기본적인 WEB개발환경 구성을 위해 데이터베이스(Mybatis, MySQL)를 연동, 설정해보겠다.



1. build.gradle에 dependency 추가하기


먼저, MySQL과 Mybatis의 dependency를 추가하여 설치해야한다.


build.gradle파일에 지난번에 이어 관련 dependency를 추가해준다.


build.gradle

1
2
3
4
5
6
7
8
9
10
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:2.0.1.RELEASE")
    compile("commons-collections:commons-collections:3.2")
    compile("org.springframework.boot:spring-boot-starter-jdbc:2.0.1.RELEASE")
    compile("mysql:mysql-connector-java:5.1.46")
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1")
    compile("org.mybatis:mybatis-spring:1.3.1")
    compile("org.mybatis:mybatis:3.4.5")
    testCompile("junit:junit:4.+")
}
cs



위와 같이, 4~8번째라인)에 해당하는 노란색 부분을 추가한다. MySQL과 Mybatis관련 dependency이다.


프로젝트를 우클릭하여 [ Gradle(STS) ] -> [ Refresh Dependencies ] 를 선택해 추가한 dependency를 설치한다.






2. application.properties에 데이터베이스 정보(DataSource) 설정하기


MySQL과 Mybatis에 필요한 dependency를 설치했으면, 프로젝트와 데이터베이스를 연동하기 위한 설정정보를 application.properties에 입력해준다.




application.properties파일은 위처럼 "src/main/resources" 폴더경로에 위치해있다.


만약 application.properties파일이 없다면, 수동으로 생성해주어도 문제없다.


application.properties

1
2
3
4
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/데이터베이스명
spring.datasource.username=유저
spring.datasource.password=패스워드
cs


Maven프로젝트 시 데이터베이스 설정정보를 입력했던 것과 비슷하게 입력해주면 된다.




3. Mapper 인터페이스 작성


Spring Boot 프로젝트와 데이터베이스 간의 연동이 끝났으면, 간단히 연결이 잘 되었는지 테스트를 해보겠다.


1. 데이터베이스 테이블 생성하기


1
2
3
4
5
6
CREATE TABLE `member` (  
    `code` int(11NOT NULL AUTO_INCREMENT,  
    `name` varchar(255DEFAULT NULL,  
    `team` varchar(255DEFAULT NULL,  
    PRIMARY KEY (`code`)
ENGINE=InnoDB AUTO_INCREMENT=DEFAULT CHARSET=utf8mb4
cs


2. 도메인 작성과 Mapper인터페이스 작성하기

MemberVO.java

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
package member.service;
 
public class MemberVO {
 
    private String code = "";
    private String name = "";
    private String team = "";
    
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTeam() {
        return team;
    }
    public void setTeam(String team) {
        this.team = team;
    }    
    
}
cs



MemberMapper.java

1
2
3
4
5
6
7
8
9
10
11
package member.service.mapper;
 
import java.util.List;
 
import member.service.MemberVO;
 
public interface MemberMapper {
 
    public List<MemberVO> selectMemberList() throws Exception;
    
}
cs



간단히 멤버를 조회하는 기능만 넣었다.

MemberMapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?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="member.service.mapper.MemberMapper">
        
    <select id="selectMemberList" parameterType="member.service.MemberVO" resultType="member.service.MemberVO">
        select * from member
    </select>
    
</mapper>
cs



3. SampleController.java 수정하기

컨트롤러에서 간단하게 확인가능하도록 SampleController.java 파일을 수정한다.

SampleController.java
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
31
32
33
34
35
package springboot;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import member.service.MemberVO;
import member.service.mapper.MemberMapper;
 
@Controller
@EnableAutoConfiguration
public class SampleController {
    
    @Autowired
    private MemberMapper mapper;
    
    @RequestMapping(value="/")
    @ResponseBody
    public String home() throws Exception{
        
        List<MemberVO> list = mapper.selectMemberList();
        
        for(int i=0; i<list.size(); i++){
            System.out.println("name : " + list.get(i).getName());
            System.out.println("team : " + list.get(i).getTeam());
        }        
        
        return "hello Gradle!";
    }
 
}
cs



4. SqlSessionFactory 설정하기

SqlSessionFactory 설정부분을 App.java에 추가해준다.

App.java

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
31
32
33
package springboot;
 
import javax.sql.DataSource;
 
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 
@SpringBootApplication
@MapperScan(value={"member.service.mapper"})
public class App {
 
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
    
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        
        Resource[] res = new PathMatchingResourcePatternResolver().getResources("classpath:mappers/*Mapper.xml");
        sessionFactory.setMapperLocations(res);
        
        return sessionFactory.getObject();
    }
 
}
cs


상단 15번째라인)에 Mapper인터페이스를 찾을수 있도록 @MapperScan 어노테이션을 사용하였다.

그리고 23번째라인)부터 SqlSessionFactory설정을 추가하였다.



5. 실행결과 확인



실행결과 원하는대로 name과 team의 데이터를 받아와 데이터베이스와 연동이 잘 되었다는 것을 알 수 있다.
하지만 하단에 경고가 발생했는데... SSL에 대한 에러정보인데, 데이터베이스 연결시 SSL을 사용하지 않아 발생하는 문제로
application.properties파일에서 아래와 같이 "useSSL=false"라고 수정해주면 된다.

application.properties
1
2
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=false
cs









Comments