1. MyBatis
- 모델(객체)과 DB(테이블)의 매개체 역할의 프레임워크 - ORM(Object Relational Mapping)
- Java 소스코드 안에 SQL문을 작성하면 코드가 길어지고 섞여 있어서 유지보수 및 분업이 어려움
- MyBatis는 기존 JDBC 방식과는 달리 SQL문을 XML 파일에 작성함으로써 코드가 줄어지고 SQL문 수정이 편함
- 또한 DBCP를 사용하여 커넥션을 여러개 생성하기 때문에 JDBC만 사용하는 것보다 작업 효율과 가독성이 좋아짐
iBatis(jdk 1.4이상부터 지원) -> MyBatis(jdk 1.5이상부터 지원)
- iBatis와 MyBatis의 차이점은 몇 개의 문법 및 사용용어(명칭, 단어) 변경 등이 있음
- MyBatis 설치
https://blog.mybatis.org -> Products -> MyBatis3 Download -> 맞는 버전 다운로드 - MyBatis 한국어 설명
https://mybatis.org/mybatis-3/ko/index.html - 필요한 코드나 사용법 설정 코드 등을 여기서 찾아서 사용하면 좋다.
2. MyBatis 작동원리
① SqlSession을 만들어 내기 위한 설계도를 작성한다.(config.xml) 이 때 나중에 필요한 mapper 위치도 작성한다.
② SqlSessionFactoryBuilder는 Reader와 함께 SqlSessionFactory를 생성하기 위한 MyBatis 구성파일(config.xml)을 읽는다.( 이 구성파일은 xml형식, java 형식 등 다양한 형식일 수 있다. )
③ 클라이언트(사용자가 아닌 MyBatis를 사용하는 개발자)가 응용 프로그램에 대한 프로세스를 요청한다.
④ Application은 SqlSessionFactoryBuilder를 사용하여 빌드된(build()) SqlSessionFactory에서 SqlSession을 가져온다.(openSession())
⑤ Application이 SqlSession에서 Mapper 인터페이스 구현 개체를 가져온다.
⑥ Application이 Mapper 인터페이스의 메소드를 호출한다.
⑦ Mapper 인터페이스의 구현 개체가 SqlSession 메소드를 호출하고 SQL문 실행을 요청한다.
⑧ SqlSession은 Mapping 파일에서 실행할 SQL문을 가져와서 실행한다.
3. MyBatis 실제 사용
- 먼저, MyBatis를 사용하기 위해서는 lib와 Build Path에 jar파일을 추가해줘야 한다.
- MyBatis 구성파일(config.xml)
- SqlSessionFactory 생성
- SqlSession 생성
- 설계도에 위치 해놓은 mapper를 찾아가서 위치를 찾음
sqlsession.selectOne("User.checkId", userid);
- 결과의 반환이 한 행인 select 문에 대한 메소드이고 User.checkId는 User라는 namespace를 가진 mapper 태그 중에서 id가 checkId인 태그로 찾아가겠다는 뜻이며 뒤에 있는 userid는 보내는 값이다.
- 여러 개의 상관없는 값을 매개변수로 보낼 때에는 HashMap을 이용해서 보내는 것이 좋다 - 실제 SQL문이 적혀 있는 mapper 생성(XML파일)
- 각각 태그 안에서 객체를 받을 때 필드값이 아니라 getter를 받아온다.
- 그래서 배열로 받는 값을 받을 때는 DTO 파일에 따로 한 문자열로 만드는 getter를 만드는 게 좋다.
* mapper에서 사용하는 문법
- " " 가 있어야 되는 것이면 #{ }
- " " 가 없이 사용하는 것이면 ${ }
'웹개발 > JSP' 카테고리의 다른 글
[JSP] MVC Model, Front-Controller 패턴, Model2의 페이지 이동 방식 (0) | 2022.06.02 |
---|---|
[JSP] EL문과 JSTL문 (1) | 2022.05.28 |
[JSP] 회원가입 유효성 검사, 비밀번호(정규식) 검사 (0) | 2022.05.26 |
[JSP] 다양한 세션 이용 (0) | 2022.05.26 |
[JSP] DBCP(Database Connection Pool) (0) | 2022.05.25 |