ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Springboot] Mybatis를 연동해보자.
    Dev/Spring Java 2019. 7. 27. 17:03

    다른 Freamework를 많이 돌아보고 와도 Spring 만큼 설정이 빡쌘 Framework가 또 없는 것 같다.

    myBatis 설정은 이 글로 종결 지어보자.

     

     

    개발 환경 

    IntelliJ + Spring boot 2.x.x  기준으로 작성되었다 .

     

    최종 폴더 구조(필요없는 클래스도 있음)

     


     

    1. Maven, Gradle 의존설정하기

     

    필요한 라이브러리는

    기본적인 Spring Boot 설정이 되어있다 가정하에 

     

    * myBatis-spring-boot-staerter

    * mariadb-java-client

    * mysql-connector-java

     

    이렇게 3가지 이다.

        compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.13'
        compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.1.0'
        compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.4.1'

    Gradle로 작성되었으며 , 필요에 따라 Maven Repository에서 찾아 쓰도록 하자.

     

     


     

     

    2. Database connection 정보 입력해주기.

     

     

    application.properties에 Database Connection 정보를 입력해주자.

    이 데이터는 Spring IoC Container에서 차후 만들 SqlsessionFactory에 자동으로 파라미터에 넣어 줄 이다.

    applcation.properties 의 일부. database 종류에 맞는 jdbc package명을 잘 입력해주자.

    application.properties  일부.

    ## maria DB
    spring.datasource.url=jdbc:mariadb://localhost:3306/test
    spring.datasource.username=아이디
    spring.datasource.password=패스워드
    spring.datasource.driverClassName=org.mariadb.jdbc.Driver
    
    ## mySql
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=아이디
    spring.datasource.password=패스워드
    spring.datasource.driverClassName=com.mysql.jdbc.Driver

     

     


     

    3. SqlsessionFactory Configuration 만들어주기.

     

    Sqlsession을 bean에 등록해주자.

    @Configuration
    public class MyBatisConfig {
    
        @Bean
        public SqlSessionFactory sqlSessionFactory(DataSource datasource) throws Exception {
            SqlSessionFactoryBean sqlsessionFactory = new SqlSessionFactoryBean();
            sqlsessionFactory.setDataSource(datasource);
            sqlsessionFactory.setMapperLocations(  new PathMatchingResourcePatternResolver()
                    .getResources("classpath:/mappers/*.xml"));
    
            return sqlsessionFactory.getObject();
        }
    
    
        @Bean
        public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
    

     

    SqlSesseionFactory에 Inejection되는 데이터는 [스탭 2]에서 입력한 spring.dataSource 가 들어온다.

     

     

     


     

    4. myBatis-config.xml 만들기

     

    myBatis 파일은 만들어도 되고, 만들지 않아도 된다.

    서로 장단점이 있는데,

     

    myBatis-config.xml을 만들고 그쪽에 클래스 타입이나 Mapper를 정의할 수 있다.

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <typeAliases>
            <package name="com.kuh.test.domain"/>
        </typeAliases>
        <mappers>
            <mapper resource="mapper/testMapper.xml"/>
        </mappers>
    </configuration>

    이렇게하면 타입을 미리 선언할수 있다는 장점이 있고, Mybatis 구 버전에선 hashMap도 선언해야 사용이 가능했지만 MyBatis 버전이 올라오면서 java 내장 자료구조는 기본적으로 제공하도록 업데이트 되었다. 위 방법의 단점은 mapper가 추가될때마다 mappers에 추가를 해줘야 한다는 불편함이 있다. config.xml 을 만들고 싶다면 resources/mybatis_config.xml로 만들어주자. 그후 추가되는 mapper는 설정 파일 내에 있는 mappers에 등록해 주자.

     

     

    두번째 방법으로는 myBatis-config.xml를 만들지 않고 바로 mapper를 만드는 방법이다.

    이 방법의 경우 클래스 타입으로 리턴받고 싶은경우 해당 mapper위에서 타입을 정의 해줘야한다는 불편함이 있고, 장점으로는 mapper가 추가 되더라도 spring에서 바로 읽어들인다는 장점이 있다. mapper를 만들고 싶다면  resources/mappers/mybatis_config.xml에 만들어주자. 아래는 mapper 기본 탬플릿 이다 .,

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd">
    
    <mapper namespace="myBatis_connection_test">
        <select id="list" resultType="hashmap">
            SELECT *
            FROM test_table
        </select>
    </mapper>

    Config.xml을 만들 경우 위 과정을 순서대로 하면되고 만들지 않을거면 config.xml 을 만드는 과정만 생략해도 정상 동작한다.

     

     

     


     

    5. 정상동작하는지 확인해보자.

     

    Test Dao
    view단에 hashMap 을 통째로 뿌린 결과 .. 원하는 결과가 데이터가 잘 나왔다.

     

     

     

     

     

     

Designed by Tistory.