-
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