MySQL DB 생성 및 컨트롤러 연동 (feat. HeidiSQL, MyBatis)

윤형선·2021년 9월 19일

오늘은 HeidiSQL을 이용하여 MySQL DB를 생성해보고 MyBatis을 이용해 Java Spring Boot와의 연동을 해보겠습니다.

1.DB 생성

  1. https://www.heidisql.com/download.php 에 가서 HeidiSQL을 다운받습니다.
  1. 프로그램을 실행시키고 호스트명, 사용자, 암호, 포트를 맞춰 접속합니다.
  1. 새로운 데이터베이스를 만들어 줍니다.
  1. 새로운 테이블을 만들어 줍니다
  1. 새 테이블에 컬럼을 만들어 줍니다. 컬럼 생성 후 아래쪽에 저장을 눌러주세요.
  1. 테스트할 더미 레코드를 삽입해 줍니다.

2. Spring Boot 연동

1.Application.java 파일에 SqlSessionFactory, SqlSessionTemplate Bean을 추가해 주세요

package program;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

@MapperScan(basePackages = "program")
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource ds) throws Exception {
	    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
	    factory.setDataSource(ds);
	    factory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:/mybatis/mybatis-config.xml"));
	    factory.setMapperLocations(
	        new PathMatchingResourcePatternResolver().getResources("classpath:/mappers/*.xml")
	    );
	    return factory.getObject();
	}

	@Bean
	public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory factory) {
	    return new SqlSessionTemplate(factory);
	}
	
	@Bean
        MappingJackson2JsonView jsonView(){
            return new MappingJackson2JsonView();
   }
}

MappingJackson2JsonView는 model and veiw가 rest api처럼 사용될 수 있게끔 도와주는 bean입니다.

  1. application.properties에 DB연결 정보를 세팅해 줍니다.
  1. controller를 작성해 줍니다.

controller의 구조를 한줄씩 살펴보겠습니다.

  1. @Controller 어노테이션은 현재의 클래스가 controller의 역할을 한다는것을 spring boot에게 알려줍니다. @RequestMapping 어노테이션은 value를 통해 어떤 url이 이 controller 와 mapping되는지 명시해줍니다. value 값은 1개 이상이 될 수 있습니다.

  1. 디버깅을 위한 로그 설정입니다.

  1. @Autowired 어노테이션은 컨트롤러에서 mapper를 호출하기 위해 호출할 mapper를 선언할 때 사용합니다. 해당 매퍼는 잠시 뒤 알아보겠습니다.

  1. @ResponseBody 어노테이션은 해당 클래스가 view페이지를 반환하지 않고 restController의 역할을 수행한다는것을 spring boot에게 알려줍니다.
    이러한 어노테이션이 붙으면 해당 클래스는 페이지가 아닌 정보만을 반환하게 됩니다.
    method를 통해 요청되는 파라미터를 어떤 방식으로 받을지 지정해 줄 수 있습니다.

  1. ModelAndView는 정보를 담당하는 model과 반환 페이지를 담당하는 view를 지정할 수 있습니다.
    ModelAndView mv = new ModelAndView("jsonView"); 를 통해 ModelAndView가 json 타입으로 정보를 전달 할 수 있게 합니다.

  1. try문으로 감싸진 부분이 adminMemberMapper클래스의 getMemberList()부분을 호출하는 부분입니다. getMemberList()부분에는 DB와 통신하여 memberList를 조회하게 되고 그 결과가 resultList에 담기게 됩니다.

  1. mv에 addObject라는 함수를 통하여 "resultList"라는 key로 resultList라는 value를 저장하게 됩니다. resultList에는 DB와 통신하여 얻어진 결과 리스트가 담겨 있습니다.

  1. 마지막으로 mv를 반환해 줍니다.


  1. Mapper를 작성해 줍니다.

    @Repository 어노테이션을 통해 해당 클래스가 mapper임을 명시해줍니다.
  1. Mapper.xml을 작성해 줍니다.

    mapper 의 namespace를 지정해 줌으로써 어떤 mapper.java와 mapping될 것인지 지정해 줍니다.
    <select>를 통해 select 문을 작성하고 id는 mapper.class의 이름과 똑같이 맞춰줍니다.

resultType은 해당 쿼리문이 조회된 후 결과의 반환 자료 타입입니다. alias를 사용할 수 있으며 다음과 같이 mybatis-config.xml에서 typeAliases 설정을 통해 지정해 줄 수 있습니다.
mybatis-config.xml의 위치는 src/main/resources/mybatis에 생성하여 줍니다.

  1. postman을 통해 DB통신을 테스트합니다.
    https://www.postman.com/ 에서 다운받으 실 수 있습니다.

    1.설치 후 Add Request를 통해 새로운 Request를 생성해 줍니다.

    2.method 방식을 맞춰주고(get 또는 post 등) url을 requestmapping과 맞춰주고 send를 보내면 다음과 같이 DB와 통신 후 결과를 반환하게 됩니다.

이상으로 DB 생성과 연동까지 알아봤습니다.

profile
안녕하세요

0개의 댓글