공부/스프링프레임워크

[spring] MyBatis

ghhong 2021. 11. 18. 14:33

MyBatis 개요와 특징

MyBatis : 자바 오브젝트와 SQL문 사이의 자동 매핑 기능을 지원하는 ORM프레임워크로 SQL을 별도의 파일로 분리해서 관리한다. 복잡한 JDBC코드를 분리하여 깔끔한 소스코드를 유지할 수 있고 수동적인 파라미터 설정과 쿼리 결과에 대한 매핑 구문을 제거할 수 있다.

 

MyBatis3 MyBatis-Spring의 주요 컴포넌트

 

1.     어플리케이션에서 SqlSessionFactoryBuilder 인터페이스를 호출한다

2.     SqlSessionFactoryBuilderMyBatis Config File을 읽는다

3.     SqlSessionFactoryBuilderSqlSessionFactory를 생성한다.

4.     DB액세스 요청이 들어온다

5.     SqlSessionFactory를 호출한다.

6.     SqlSessionFactorySqlSession을 생성한다.

7, 8. 분리된 SQL문이 저장되어있는 mappingFilesqlSqlSession을 사용하여 호출한다.

 

MyBatis3의 주요 컴포넌트의 역할

MyBatis 설정파일(SqlMapConfig.xml) : 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경정보를 설정한다.

SqlSessionFactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성한다.

SqlSessionFactory : SqlSession을 생성한다.

SqlSession : 핵심적인 역할을 하는 클래스로서 SQL실행이나 트랜잭션 관리를 실행한다. SqlSession 오브젝트는 Thread-Safe하지 않으므로 thread마다 필요에 따라 생성한다.

mapping파일(user.xml) : SQL문과 OR Mapping을 설정한다.

 

MyBatis-Spring : MyBatisSpring의 연동을 위한 오픈소스

1.     SqlSessionFactoryBeanSqlSessionFatory를 생성한다.

2.     SqlSessionFactorySqlSessionTemplate의 생성자로 전달된다.

 

MyBatis-Spring의 주요 컴포넌트의 역할

MyBatis 설정파일(sqlMapConfig.xml) : VO 객체의 정보를 설정한다.

SqlSessionFactoryBean : MyBatis 설정파일을 바탕으로 SqlSessionFactory를 생성한다. Spring Bean으로 등록해야 한다.

SqlSessionTemplate : 핵심적인 역할을 하는 클래스로서 SQL실행이나 트랜잭션 관리를 수행한다. SqlSession인터페이스를 구현하며, Thread-Safe하다. Spring Bean으로 등록해야한다.

 

Mapping파일(user.xml) : SQL문과 ORMapping을 설정한다.

 

(Spring Bean 설정파일(beans.xml) : SqlSessionFactoryBeanBean등록할 때 DataSource 정보와 MyBatis Config파일정보, Mapping파일의 정보를 함께 설정한다. SqlSessionTemplateBean으로 등록한다.)

 

mapping파일인 user.xmlsql문과 매핑정보(id)를 작성한다. MyBatis설정파일인 SqlMapConfig.xml에 사용할 VO객체의 클래스명과 alias를 설정한다. Spring bean설정파일인 beans.xmlDataSource, SqlMapConfig.xml, User.xmlset하여 SqlSessionFactoryBean을 생성한다. 이를 SqlSessionTemplate 생성자에 인자로 넣어 sqlSession을 생성한다.

 

MyBatis3Mapper 인터페이스

Mapper 인터페이스는 Mapping파일에 기재된 SQL을 자바 인터페이스를 통해 Type Safe하게 호출하기 위한 인터페이스이다.

Mapper인터페이스를 사용하지 않으면 SQL을 호출하는 프로그램은 SqlSession의 메서드의 아규먼트에 문자열로 네임스페이스+”.”+SQL ID로 지정해야 한다. 이때 오타에 의해 버그가 숨어있일 수 있고 IDE에서 제공하는 code assist를 사용할 수 없다는 단점이 있다.

 

Mapper인터페이스 작성 및 설정

1. UserMapper 인터페이스를 개발자가 직접 작성해야한다.

2. Mapping파일(User.xml) 수정 : 패키지 이름+”.”+인터페이스이름+”.”+메서드이름이 네임스페이스+”.”+SQL ID가 되도록 네임스페이스와 아이디를 설정해야 한다. 네임스페이스 속성에는 패키지를 포함한 Mapper인터페이스의 이름을 적는다. SQL ID에는 매핑하는 메서드의 이름을 적는다.

-> 네임스페이스 : myspring.user.dao.UserMapper / sql Id : selectUserById

3. DAO수정 : session을 사용하던 것에서 UserMapper 객체를 생성하여 UserMapper를 사용하여 처리하게 수정한다.

4. MapperFactoryBean 설정 : MapperFactoryBeanUserMapper를 구현하는 프록시 클래스를 생성한다. 프록시는 런타임에 생성되므로 지정된 Mapper는 실제 구현 클래스가 아닌 인터페이스여야 한다. MapperFactoryBeansqlSessionFactorysqlSessionTemplate 이 필요하다.

 

여러 개의 Mapper 인터페이스 설정

MapperScannerConfigurer를 이용하면 지정한 패키지 아래의 모든 인터페이스가 Mapper인터페이스로 간주되어 Mapper인터페이스의 객체가 DI컨테이너에 등록된다.

'공부 > 스프링프레임워크' 카테고리의 다른 글

[spring] spring mvc  (0) 2021.11.25
[spring] pojo  (0) 2021.11.18
[spring] aop  (0) 2021.11.18
[spring] Spring JDBC  (0) 2021.11.17
[spring] 사용자 관리 프로젝트 아키텍쳐  (0) 2021.11.11