Leeyebin의 블로그
7장 퍼시스턴스 프레임워크의 도입 본문
퍼시스턴스 프레임워크(persistence framework)를 사용하면 직접 JDBC API를 호출하지 않고도 데이터베이스에 있는 데이터를 다룰 수 있다.(개발자 대신 퍼시스턴스 프레임워크가 JDBC API를 호출한다.)
퍼시스턴스(Persistence)
-데이터의 지속성을 의미한다. 애클리케이션을 종료하고 다시 실행하더라도 이전에 저장한 데이터를 다시 불러올 수 있는 기술
프레임워크(Framework)
-동작에 필요한 구조를 어느 정도 완성해 놓은 반제품 형태의 도구이다.(라이브러리는 개발에 필요한 도구들을 나열해 놓은 것)
퍼시스턴스 프레임워크
-퍼시스턴스 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있다.
-퍼시스턴스 프레임워크에는 SQL 문장으로 직접 DB 데이터를 다루는 'SQL Mapper'(ex:mybatis)와 자바 객체를 통해 간접적으로 DB 데이터를 다루는 'ORM'(ex:Hibernate, TopLink)이 있다.
7.1 mybatis 소개
mybatis의 핵심은 개발과 유지보수가 쉽도록 소스 코드에 박혀있는 SQL을 별도의 파일로 분리하는 것이다.
출처 : 자바 웹 개발 워크북
mybatis는 객체 관계 맵퍼와 달리 SQL 문을 감추거나 대체하지 않는다. 개발자에게 SQL문을 더 쉽게 작성하고 관리하도록 도와준다. SQL의 작성을 데이터베이스 및 업무 전문가에게 맡길 수 있다.
mybatis 사용하기
출처 : 자바 웹 개발 워크북
mybatis 사용준비
https://github.com/mybatis/mybatis-3/releases
다운받아서 압축을 풀고 lib폴더에 있는 Jar파일들을 'WEB-INF/lib' 폴더에 복사한다.
7.2 mybatis 적용
출처 : 자바 웹 개발 워크북
mybatis 프레임워크의 핵심 컴포넌트
컴포넌트 |
설명 |
SqlSession |
실제 SQL을 실행하는 객체. 이 객체는 SQL을 처리하기 위해 JDBC드라이버를 사용함. |
SqlSessionFactory |
SqlSession 객체를 생성함. |
SqlSessionFactoryBuilder |
mysql 설정 파일의 내용을 토대로 SqlSessionFactory를 생성함. |
mybatis 설정 파일 |
데이터페이스 연결 정보, 트랜잭션 정보, mybatis 제어 정보 등의 설정 내용을 포함하고 있음. SqlSessionFactory를 만들 때 사용됨. |
SQL 맵퍼 파일 |
SQL 문을 담고 있는 파일. SqlSession 객체가 참조함 |
DAO에서 SqlSessionFactory 사용
SqlSeesion의 주요 메서드
메서드 |
설명 |
selectList() |
SELECT문을 실행, 값 객체(VO) )목록을 반환함. |
selectOne() |
SELECT문을 싷행, 하나의 값 객체를 반환 |
insert() |
INSERT문을 싷행, 반환값은 입력한 데이터 개수 |
update() |
UPDATE문을 싷행, 반환값은 변경한 데이터 개수 |
delete() |
DELETE문을 실행. 반환값은 삭제한 데이터 개수 |
전달된 'project' 객체는 SQL 맵퍼 파일을 실행할 때 사용된다.
SQL맵퍼 파일에서 #{프로퍼티명} 자리에 project 객체의 프로퍼티 값이 놓인다.(객체의 프로퍼티란 : 프로퍼티 이름은 getter/setter 메서드의 이름에서 추출한다.)
SqlSession의 selectOne()과 delete()에 Integer 객체 전달시에 int와 같은 기본 데이터 형은 객체가 아니므로 매개변수로 사용할 수 없지만 컴파일 시 Integer 객체로 오토박싱되기 때문에 오류가 발생하지 않는다. 즉 new Integer(no) 코드로 변한다.
commit()과 rollback() 메서드
update, insert에는 "sqlSession.commit();"이 있는데 SELECT문은 값을 변경하는 것이 아니므로 commit() 메서드를 호출할 필요가 없다.
자동 커밋
자동 커밋을 하고 싶다면 SqlSession 객체를 생성할 때 다음과 같이 지정한다.
SqlSession sqlSession = sqlSessionFactory.openSession(true);
openSession()의 매개변수 값을 true로 지정하면 자동 커밋을 수행하는 SqlSession객체를 반환한다. 하지만 트랜잭셩을 다룰 수 없다.
SQL맵퍼 파일 작성(이후에 설명)
ApplicationContext변경
기존에는 프로퍼티 파일과 어노테이션을 통해 객체를 생성하였지만, SqlSessionFactory는 이런 방식으로 생성할수 없다. 별도로 SqlSessionFactory를 준비하여 ApplicationContext에 등록해야 한다.
SqlSessionFactory 객체 준비
ContextLoaderListener.java
mybatis 설정 파일 준비
db.properties 파일 작성
7.3 SQL 맵퍼 파일
mybatis의 가장 중요한 목적 중 하나가 DAO로부터 SQL문을 분리하는 것이다. 이렇게 분리된 SQL문은 SqlSession에서 사용한다.
p.s
랩퍼 클래스
랩퍼 클래스(Wrapper Class)란, 자바의 기본 데이터형 값을 객체로 다루기 위해 기본으로 제공되는 클래스
7.4 mybatis 설정 파일
mybatis 프레임워크는 자체 커넥션풀을 구축할 수 있다. 또한, 여러 개의 데이터베이스 연결 정보를 설정해 두고 실행 상황(개발, 테스트, 운영 등)에 따라 사용할 DB를 지정할 수 있다. 실행 성능을 높이기 위해 Select 결과를 캐싱해 두기도 하고, SQL 맵퍼 파일에서 사용할 값 객체에 대해 별명을 부여할 수 있다.
mybatis에서 JNDI 사용하기
7.5 로그 출력 시키기
mybatis의 로그 출력 기능을 켜며 mybatis에서 실행하는 SQL 문과 매개변수 값, 실행 결과를 실시간으로 확인할 수 있다. 디버깅을 할 때 매우 유용하다.
mybatis 설정 파일에 로그 설정 추가
mybatis-config.xml 일부분
로그 출력 구현체
Log4J 외에 value에 넣을 수 있는 값들
출처 : 자바 웹 개발 워크북
Log4J 라이브러리 파일 준비
Log4J 설정 파일 작성
로그의 수준, 출력 방식, 출력 형식, 로그 대상 등에 대한 정보가 들어간다.
log4j.properties
로그의 출력 등급 설정
출력 등급에 대한 상속 관계
로그 출력 등급표
로그 출력 등급 |
설명 |
FATAL |
애플리케이션을 중지해야 할 심각한 오류 |
ERROR |
오류가 발생했지만, 애플리케이션은 계속 실행할 수 있는 상태 |
WARN |
잠재적인 위험을 안고 있는 상태 |
INFO |
애플리케이션의 주요 실행 정보 |
DEBUG |
애플리케이션의 내부 실행 상황을 추적해 볼 수 있는 상세 정보 |
TRACE |
디버구보다 더 상세한 정보 |
주요 로그 출력자 클래스
출력 담당자 클래스 |
설명 |
org.apache.log4j.ConsoleAppender |
System.out 또는 System.err로 로그를 출력한다. 기본은 System.out이다. 즉 표준 출력 장치인 모니터로 출력한다. |
org.apache.log4j.FileAppender |
파일로 로그를 출력한다. |
org.apache.log4j.net.SocketAppender |
원격의 로그 서버에 로그 정보를 담은 LoggingEvent 객체를 보낸다. |
출력 형식 클래스
출력된 로그의 일부분
7.6 동적 SQL의 사용
동적 SQL 엘리먼트
mybatis는 동적 SQL을 위한 엘리먼트를 제공한다. JSTL 코어 라이브러리에 정의된 태그들과 비슷하다.
-엘리먼트들의 종류와 사용법은 분량이 많아 mybatis DOC 링크로 대체
<choose> 엘리먼트의 활용
MySqlProjectDao.xml
프로젝트 목록 페이지에 정렬 링크 추가
ProjectList.jsp
프로젝트 목록 컨트롤러 변경
ProjectListController.java
ProjectDao 인터페이스 변경
ProjectDao.java
MySqlProjectDao.java
<set> 엘리먼트의 활용
ProjectDao.java
MySqlProjectDao.java
'공부 기록실 > JAVA 웹 개발 워크북 요약정리' 카테고리의 다른 글
8장 스프링 IoC 컨테이너 (0) | 2017.06.26 |
---|---|
6장 미니 MVC 프레임워크 만들기 (0) | 2017.04.26 |
5장 MVC 아키텍쳐 (0) | 2017.04.17 |
4장 서블릿과 JDBC (0) | 2017.04.10 |
3장 서블릿 프로그래밍 (0) | 2017.04.05 |