본문 바로가기

 

스프링 부트 ( Spring boot ) Mybtis(마이바티스)

이용하여 DB에 접근하여 데이터를 활용해보자

 

 

 

오늘은 Mybtis(마이바티스)를 이용하여 DB에 접근하여 데이터를 가져오는 방법에 대해서 알아보도록 하겠습니다.

 

마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결시켜줍니다.

 

스프링 부트에서는 JPA 를 이용하여 DB에 접근하는 방법을 권유하고 있습니다. 이애 대해서는 나중에 따로 포스팅을 하도록 하겠습니다. 우선은 Mybatis로 접근을 하도록 하겠습니다.

 

우선 mybatis를 이용하기 위해서는 maven (메이븐) 을 이용하거나 gradle(그레들) 을 이용하여 패키지를 관리합니다.

 

여기서는 maven을 이용하여 패키지를 관리하도록 하갰습니다.

mybatis, mybatis-spring, spring-boot-starter-jdbc 를 사용하기 위해 dependency를 아래와 같이 추가해줍니다.

<!-- Mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

 

메이븐 레파지토리에서 검색가능합니다.

https://mvnrepository.com/

 

 

이후 패키지와 자바 클래스를 아래와 같은 구조로 생성해 줍니다.

 

 

 

 

config 패키지 폴더에 DatabaseConifg 클래스 그리고 dao 패키지 폴더에

본인이 원하는 Dao 클래스를 만들어줍니다. 이름은 관련된 모듈이나 이름을 사용하여 만들어 주시면 좋습니다.

 

이후 Config 파일을 살펴 봅시다.

 

@Configuration
@MapperScan(basePackages="com.kingname.tistory.king.dao")
@EnableTransactionManagement
public class DatabaseConfig {

  @Bean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
  final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);
    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    sessionFactory.setMapperLocations(resolver.getResources("mapper/*.xml"));
    return sessionFactory.getObject();
  }

  @Bean
  public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
    final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
    return sqlSessionTemplate;
  }

}

 

@Configuration 어노테이션은 이 자바 클래스가 설정관련 파일이라고 설정하는 어노테이션 입니다.

@MapperScan 어노테이션은 mapper.xml 파일들이 바라볼 기본 패키지 위치를 지정해 주는 어노테이션 입니다.

 

모든 마이바티스 애플리케이션은 SqlSessionFactory 인스턴스를 사용합니다. 이후 빈을 생성하여

sessionFactory에 Mapper의 위치를 지정해 줍니다.

 

이후 MariaDB를 이용하여 간단한 테이블을 만들어 주도록 합시다. 그외 DB를 사용하셔도 무방합니다.

 

<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>1.6.0</version>
</dependency>

 

우선 dependancy를 추가해줍니다.

이후 application.properties 파일에 아래의 설정을 추가해 줍니다.

본인의 설정에 맞게 설정해 주셔야 합니다.

 

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/king
spring.datasource.username=root
spring.datasource.password=1234

 

DB의 이름과 로그인 아이디, 비밀번호를 입력해줍니다.

 

 

이후 Mapper.xml 파일로 이동하여

 

<?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="com.kingname.tistory.king.dao.KingDao">
</mapper>

 

mapper namespace 설정을 dao 패키지 폴더로 지정해 줍니다.

이렇게 하시면 모든 설정이 끝났습니다.

이제는 간단한 select 문을 사용하여 데이터를 불러오는 작업을 해보도록 하겠습니다.

 

 

Domain 클래스를 만들어줍시다. Dto 라고 만들어 주셔도 상관없습니다.

이후 DB에서 가져올 데이터를 연결해줄 클래스를 아래와 같이 만들어 줍니다.

 

public class KingDomain {
    private int id;
    private String title;
    private String content;
    private Timestamp reg_date;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Timestamp getReg_date() {
        return reg_date;
    }

    public void setReg_date(Timestamp reg_date) {
        this.reg_date = reg_date;
    }
}

 

Lombok을 사용하셔도 무방합니다. Lombok에 대해서는 따로 다음에 포스팅을 하도록 하겠습니다.

 

2018/09/27 - [IT/프로그래밍] - [Lombok/롬복] lombok 사용법 설치하기 및 적용하기 및 예제

 

 

이후 해당 도메인 클래스를 이용하여 Select를 해보도록 하겠습니다.

Dao 클래스로 이동하여 interface로 변경하여 아래와 같이 수정하겠습니다.

 

public interface KingDao {
    public List<KingDomain> getAll() throws Exception;
    public KingDomain getOne() throws Exception;
}

 

함수 이름과 Mapper의 id 를 일치시켜 사용합니다.

 

<select id="getAll" resultType="com.kingname.tistory.king.domain.KingDomain">
    select *
    from TBL_KING;
</select>

<select id="getOne" resultType="com.kingname.tistory.king.domain.KingDomain">
    select *
    from TBL_KING
    limit 1;
</select>

 

List 형태와 KingDomain 형태로 데이터를 가져옵니다.

이후 @autowird를 이용하여 불러와 아래와 같이 사용하시면 됩니다.

Spring MVC와는 조금 다르게 접근이 가능합니다.

 

@Autowired
KingDao kingDao;

@RequestMapping(value = "/string", method = RequestMethod.GET)
public String getHomeString() {

    return "index";
}

@RequestMapping(value = "all", method = RequestMethod.GET)
public List<KingDomain> getKingDomainAll() throws Exception {
    return kingDao.getAll();
}

@RequestMapping(value = "one", method = RequestMethod.GET)
public KingDomain getKingDomainOne() throws Exception {
    return kingDao.getOne();
}

 

이후 AJAX 통신을 이용하거나 해당 객체를 jsp나 jstl 를 이용하여 사용하시면 됩니다.

 

$.ajax({
    type: "GET",
    url: "/all",
    success: (datas) => {
        console.log(datas);
        datas.map(data => {
            console.log(data);
        });
    }
});

 

이상으로 스프링 부트 ( Spring boot ) Mybtis(마이바티스) 를 이용하여 DB에 접근하여 데이터를 활용해보자

포스팅을 마치도록 하겠습니다.

궁금하신점이나 이상이 있으신 점이 있으시다면 댓글을 통해서 알려주시면 감사하겠습니다.

 

 


도움이 되셨다면 공감과 +a가 제 젤리값의 큰 힘이됩니다.

 

 

 

엉망진창

개인 블로그 입니다. 코딩, 맛집, 정부정책, 서비스, ~방법 등 다양한 정보를 소개합니다