Backend/Spring

Spring boot + tibero + mybatis 연동하기

keepbang 2021. 4. 12. 20:44

이거 연결하는데 이것저것 오류가 많이 발생했다....

연결하기 전 해야 할 것!!!

1. tibero를 설치한다.

  • tibero는 tmax사이트에서 받을 수 있다. [설치 링크]
  • 다운로드할 때 회원가입을 해야 하고 데모 라이선스를 신청하여 사용할 수 있다.

 


 

Spring Boot 설정

1. application.properties에 db정보 입력

spring.datasource.url=jdbc:tibero:thin:@127.0.0.1:8629:tibero
spring.datasource.driver-class-name=com.tmax.tibero.jdbc.TbDriver
spring.datasource.username=test
spring.datasource.password=test00
  • username과 password는 티베로 설치 후 설정하면 된다.
  • 추가 설명을 하자면 티베로는 오라클과 sql문법의 비슷하다

2. tibero6-jdbc-14.jar파일 추가

티베로는 jdbc를 따로 등록해주어야 한다.

티베로 설치경로에 들어가서 C:\TmaxData\tibero6\client\lib\jar로 들어가면 tibero6-jdbc-14.jar파일이 있다.

tibero6-jdbc란 파일도 있는데

여기에 들어가면 두 개의 차이점을 알 수 있다.


3. pom.xml에 추가

pom.xmltibero6-jdbc-14를 추가하고 복사한 파일을 spring boot 프로젝트에 붙여 넣기 한다.

다른 기타 의존성 정보도 추가해준다.

의존성을 추가할 때는 해당 버전이 호환이 되는지 확인을 하고 추가해야 한다.

pom.xml

 ... 

       <!-- tibero 6 -->
        <dependency>
            <groupId>tibero6</groupId>
            <artifactId>tibero6-custom</artifactId>
            <version>1.0.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/target/tibero/tibero6.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
            <version>1.3.2</version>
        </dependency>

      ...
  • 파일은 프로젝트에 target/tibero에 넣고 이름을 바꿔서 넣었다.
  • jar파일 이름은 상관없는 것 같다.
  • ${project.basedir}는 환경변수인데 절대 경로보다는 유연하게 할 수 있다.


4. Database config 클래스 생성

package com.example.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DataSourceConfig {

         @Bean
        @ConfigurationProperties(prefix = "spring.datasource")//위에 application.properties에 앞부분
        public DataSource firstDataSource() {

            return DataSourceBuilder.create().build();
        }

        @Bean
        public SqlSessionFactory firstSqlSessionFactory(DataSource firstDataSource, ApplicationContext applicationContext) throws Exception {

            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(firstDataSource);
            sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mapper/*.xml"));//xml파일의 위치, src/main/resources아래에 위치
            return sqlSessionFactoryBean.getObject();
        }

        /**
         * DAO 클래스에서 사용한다.
        **/
        @Bean
        public SqlSessionTemplate firstSqlSessionTemplate(SqlSessionFactory firstSqlSessionFactory) throws Exception {

            return new SqlSessionTemplate(firstSqlSessionFactory);
        }
}

5. 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="mapper.ExampleMapper">
    <select id="getCurrentDateTime" resultType="java.lang.String">
        SELECT SYSDATE FROM DUAL
    </select>
</mapper>

간단하게 시간을 나타내는 쿼리문이다.​


6. DAO클래스를 만든다

package com.example.common.database.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.util.Assert;

@Repository
public class CommonDAO {

    @Autowired
    @Qualifier("firstSqlSessionTemplate")//config파일의 sqlsession 매소드 이름
    private SqlSession sqlSession;

    public String getCurrentDataTime() {
        return sqlSession.selectOne("mapper.ExampleMapper.getCurrentDateTime");
    }

    public Object selectObject(String mapperId) throws Exception {
        return this.sqlSession.selectOne(mapperId);
    }

    public Object selectObject(String mapperId, Object parameter) throws Exception {
        return this.sqlSession.selectOne(mapperId, parameter);
    }
}
  • sqlSession을 사용해서 맵퍼에 있는 sql문을 실행한다.
  • getCurrentDataTime처럼 직접 넣을 수도 있지만 아래 selectObject처럼 만들어서 service에서 사용할 수 있다.

이상태에서 실행하면 실행이 되는 걸 볼 수 있다.