Hayden's Archive

[Spring/MyBatis] Persistence Layer / MyBatis 라이브러리 본문

Study/DB

[Spring/MyBatis] Persistence Layer / MyBatis 라이브러리

_hayden 2020. 8. 4. 14:04

Persistence Layer

DAO는 반드시 Component 기반으로 만들어져야 한다.
DAO가 있는 레이어Data Access Layer 또는 Persistence Layer라고 함. 여기에서 Raw한 데이터를 가져옴.

퍼시스턴스 계층(Persistence Layer) 참고 : https://blog.naver.com/nine01223/220373593398

Service Layer - 데이터를 가공. 

이렇게 한 것을 최종적으로 Controller에게 넘겨줌.

 


MyBatis

- MyBatis 는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.

- MyBatis 는 JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다.

- MyBatis 는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정하고 매핑하기 위해, XML 과 어노테이션을 사용할 수 있다. 

 

www.mybatis.org/

 

mybatis

 

mybatis.org

 

Products 메뉴에서 MyBatis 3과 Spring을 다운 받는다.

- MyBatis 3(SQL Mapping Framework for Java) : Framework라기보다 XML 기반의 SQL Mapper라고 보는 게 더 정확함.

- Spring(Integration with Spring) : MyBatis가 돌아가려면 DI랑 연결해야 하는데, 
웹으로 연결할 때는 MyBatis만으로는 부족하고 위에 하나가 더 있어야 함. Spring(Integration with Spring)을 추가로 넣어야 함.

DB 연결시 Spring에서 제공하는 Spring JDBC 말고 MyBatis로 하겠다. MyBatis Framework로 DAO랑 연결하고, DI 컨테이너를 쓸 것임.
모든 컨테이너가 인식할 수 있는 기술은 XML임. 쿼리문을 XML로 만들 것.

참고)
파이썬이 가지고 있는 어마어마한 장점이 있지만, 웹쪽은 자바가 좋음. 중간의 장점을 결합한 언어가 스칼라(Scala). 인공지능 쪽이랑도 관련이 있고, 웹의 고급스러운 특징과 연결됨. 그만큼 매력적인 언어.
MyBatis for Scala -> 스칼라 언어를 위한 MyBatis

 

mybatis-3.5.5 라이브러리만 넣으면 에러남.

 

JDBC 5단계

1. Driver 로딩
2. DB 서버와 연결 -> Connection 리턴
3. PreparedStatement 생성 -> 이 때 쿼리문 들어감
4. 쿼리문 실행 -> SELECT 문일 때는 executeQuery()
나머지 DML일 때는 executeUpdate()
5. 자원 반납

프레임워크에서는 직접 자원을 닫음. 위의 모든 걸 MyBatis에서 다 해줌. 단위테스트가 제일 중요함.

결론) MyBATIS Framework 은 JDBC 절차를 간소화한 라이브러리이다.

 

MyBatis Framework 의 장점

- 작고 간단하다 ( mybatis-3.2.8.jar / 약 400kb / 다른 라이브러리와 의존관계 없다. )
- 기존 애플리케이션/테이터베이스를 변경하지 않아도 된다.
- (SQL Mapper(Data Mapper) =>SQL 과 비지니스 객체와의 바인딩)
- 생산성 / 성능 / 작업의 분배 (소스코드와 SQL 의 분리)
- 관심사의 분리
- ( DBMS 에 독립적인 API 제공 및 JDBC API가 아닌 비지니스 객체만 가지고 작업가능 )

 

 

모든 MyBatis 애플리케이션은 SqlSessionFactory 인스턴스를 사용한다. SqlSessionFactory 인스턴스는 SqlSessionFactoryBuilder 를 사용하여 만들수 있다. SqlSessionFactoryBuilder로부터 SqlSessionFactory를 얻어내고 여기로부터 SqlSession을 얻어냄.