ABOUT ME

Today
Yesterday
Total
  • MyBatis 정리
    DB 2022. 5. 12. 22:47

    MyBatis란?

     -객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 합니다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있다.


    MyBatis 특징

      -복잡한 쿼리나 다이나믹 쿼리에 효과적이지만,비슷한 쿼리를 남발하는 단점이 있다.

    프로그램 코드와 sql 쿼리를 분리함으로써 코드의 간결성 및 유지보수성이 향상된다.

     


    핵심 구성요소 

    Mybatis 주요 컴포넌트의 역할

    • MyBatis 설정파일(SqlMapConfig.xml) : 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경정보를 설정한다.
    • SqlSessionFactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성한다.
    • SqlSessionFactory : SqlSession을 생성한다.
    • SqlSession : 핵심적인 역할을 하는 클래스로서 SQL 실행이다 트랙잭션 관리를 실행한다. SqlSession 오브젝트는 Thread-Safe 하지 않으므로 thread마다 필요에 따라 생성한다.
    • Mapping 파일(user.xml) : SQL문과 OR Mapping을 설정한다.

    Mybatis 설정

    DBConfig 파일에 sqlSessionFactory 함수와 sqlSessionTemplate 함수를 추가해 줍니다.

    • sqlSessionFactory():
      • [Spring-MyBatis]에서는 SqlSessionFactory를 생성하기 위해 SqlSessionFactoryBean을 사용한다.
      • 만약 spring이 아닌 MyBatis 단독으로 사용할 경우에는 SqlSessionFactoryBuilder를 사용한다.
      • Mapper 파일 위치: "classpath:/mapper/**/sql-*.xml"로 지정
    • Mapper: 사용할 SQL을 담고 있는 XML 파일을 의미
    • Configuration 최종 코드:
    package com.example.board;
    
    import com.zaxxer.hikari.HikariConfig;
    import com.zaxxer.hikari.HikariDataSource;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    import javax.sql.DataSource;
    
    @Configuration
    @PropertySource("classpath:/application.properties") // 설정 파일 위치 지정
    public class DBConfig {
    
        @Autowired
        private ApplicationContext applicationContext;
    
        @Bean
        @ConfigurationProperties(prefix="spring.datasource.hikari") // 다음의 prefix로 시작하는 설정을 이용해서 hikariCP의 설정 파일을 만듦
        public HikariConfig hikariConfig(){
            return new HikariConfig();
        }
    
        @Bean
        public DataSource dataSource() throws Exception{ // 위에서 만든 설정 파일을 이용해서 디비와 연결하는 데이터 소스를 생성
            DataSource dataSource = new HikariDataSource(hikariConfig());
            System.out.println(dataSource.toString());
            return dataSource;
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/sql-*.xml"));
            return sqlSessionFactoryBean.getObject();
        }
    
        @Bean
        public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    2.Mapper 폴더 생성하기 

    • src/main/resources 폴더 밑에 mapper 폴더 생성
    • 위 DBConfig에서 Mapper 파일 위치를 "classpath:/mapper/**/sql-*.xml"로 지정했다.
      • 이 패턴은 다음을 의미한다.
      • [classpath]: resource 폴더 의미
      • [/mapper/**/]: mapp 폴더 밑의 모든 폴더를 의미
      • [/sql-*.xml]: 이름이 sql-로 시작하고 확장자가 xml인 모든 파일을 의미
    •  

    MaBtis 연결 확인하기

    • 간단한 테스트 코드를 작성해서 확인해본다.
    • test/java/.../board 밑에 있는 (프로젝트 생성 때부터 존재) BoardApplicationTests에 아래의 코드를 작성한다.
    package com.example.board;
    
    import org.junit.jupiter.api.Test;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class BoardApplicationTests {
    
        @Autowired
        private SqlSessionTemplate sqlSession;
    
        @Test
        void contextLoads() {
        }
    
        @Test
        public void testSqlSession() throws Exception{
            System.out.println(sqlSession.toString());
        }
    }

    https://java119.tistory.com/90

     

    [MyBatis] 동적 쿼리 <where> 문법 총 정리

    개념 추가 쿼리 문의 내용을 문 안에 작성하면 첫 조건이 AND로 시작할지라도 WHERE로 치환해준다. 조건 MyBatis version 3.2.3 이상 문법 SELECT * FROM table 추가 SQL 잘못된 문법 예시 1. SELECT * FROM boar..

    java119.tistory.com

     

Designed by Tistory.