스프링2018. 9. 2. 14:36

출처 : 코드로 배우는 스프링 웹 프로젝트

저자 : 구멍가게 코딩단

 

 

* MyBatis 를 이용할 때 SQL 문을 사용하는 방식

 

  - XML만을 이용해서 SQL 문을 설정, DAO 에서는 XML 을 찾아서 실행하는 코드를 작성하는 방식

      장점 : SQL 문은 별도의 XML 로 작성되기 때문에 SQL 문의 수정이나 유지보수에 적합

      단점 : 개발 시 코드의 양이 많아지고, 복잡성이 증가

 

  - 애노테이션과 인터페이스만을 이용해서 SQL 문을 설정

      장점 : 별도의 DAO 없이도 개발이 가능하기 때문에 생산성이 크게 증가

      단점 : SQL 문을 애노테이션으로 작성하므로, 매번 수정이 일어나는 경우 다시 컴파일

 

  - 인터페이스와 XML 로 작성된 SQL 문의 활용

      장점 : 간단한 SQL 문은 애노테이션으로, 복잡한 SQL 문은 XML 로 처리하므로, 상황에 따라서 유연하게 처리

      단점 : 개발자에 따라 개발 방식의 차이가 있을 수 있기 때문에, 유지보수가 중요한 프로젝트의 경우 부적합

 

 

* 국내의 대부분 프로젝트는 XML 만을 이용해서 SQL 문을 작성하고, 별도의 DAO 를 만드는

  방식을 선호한다고 함.

  최대장점은 SQL 문을 온전히 분리해서 처리하기 때문에, 향후 SQL 문의 변경이 일어날 때,

  대처가 수월하다는 점

 

 

개발 순서를 알아두면 좀 더 수월할 것 같아서 기록함

 

 

* MyBatis 를 XML 을 사용하여 작성하는 경우의 코딩순서

   1. 테이블 생성 및 개발 준비

   2. 테이블 생성 및 기타 데이터베이스 관련 설정

   3. 도메인 객체의 설계 및 클래스 작성

   4. DAO 인터페이스의 작성

   5. 실행해야 하는 기능을 인터페이스로 정의

   6. XML Mapper 의 생성과 SQL 문 작성

   7. XML 작성 및 SQL 작성

   8. MyBatis 에서 작성된 XML Mapper 를 인식하도록 설정

   9. DAO 구현

   10. DAO 인터페이스를 구현한 클래스 작성

   11. 스프링상에 DAO 등록 및 테스트

 

 

1. 테이블 생성 및 개발 준비

 

   MySql 을 실행 후

 

 

zerock 계정으로 들어감

 

 

create table

 

regdate 는 최초 입력된 시각을 기록하기 위한 것이고

updatedate 는 최종 수정된 시각을 기록하기 위한 것임

 

 

 

2. 도메인 객체의 설계 및 클래스 작성

 

   도메인 이라는 용어

 

   ex) 쇼핑몰을 예로 들어 회원, 상품, 배송 등과 같은 용어가 도메인 이라고 함

 

sr/main/java 아래 org.zerock.domain 하위에 MemberVO 생성 (도메인 클래스 생성)

 

 

getter , setter , toString 까지 생성 생성 ~

 

 

 

3. DAO 인터페이스의 작성 ( class 아님 Interface 파일임!!! )

 

sr/main/java 아래에 org.zerock.persistence 패키지를 생성한 뒤 DAO 생성

 

 

 

4. XML Mapper 의 저장경로 생성 과 XML Mapper 의 작성

  

DAO 에서 사용하는 SQL 문을 작성하는 것 / MyBatis 에서 SQL 문을 저장하는 존재를 Mapper 라는 용어로 표현

 

Mapper 의 저장 경로 생성 및 XML Mapper 의 생성

 

 

 

5. MyBatis 에서 작성된 XML Mapper 를 인식하도록 설정

 

작성된 mappers 폴더 내에 어떤 폴더이건 관계없이 파일의 이름이 'Mapper.xml' 로 끝나면 자동으로 인식하도록 설정하는 것

 

root-context.xml 파일을 열어서 property name mapperLocations 를 추가함

 

추가할 내용 : <property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>

 

 

 

6. DAO 인터페이스의 구현

 

MyBatis 에서 DAO 를 이용하는 경우는 SqlSessionTemplate 이라는 것을 이요해서 DAO 를 구현하므로

SqlSessionTemplate 을 설정하는 작업부터 함

 

root-context.xml 를 열어서 sqlSession bean 을 추가함

 

 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
  <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
 </bean>

 

 

 

7. DAO 인터페이스를 구현한 클래스 작성

 

 

 

@Repository 애노테이션은 DAO 를 스프링에 인식시키기 위해서 주로 사용

 

8. 스프링상에 DAO 등록 및 테스트

 

MeberDAOImpl 이 @Repository 애노테이션 설정으로 스프링에 인식되더라도

스프링에서 해당 페이지를 스캔하지 않으면 제대로 스프링의 빈으로 등록 되지 못함

 

그래서 root-context.xml 에 설정 추가!

 

<context:component-scan base-package="org.zerock.persistence"></context:component-scan>

 

 

src/test/java 하위에 org/zerock/web 에 MemberDAOTest 파일 생성

 

 

 

MemberDAOTest.java 우클릭 --> Run As -->JUnit Test 클릭하여 테스트 실행

 

 

 

JUnit 실행 결과 로그

 

 

 

생성된 tbl_member 테이블의 1개 로우를 MySQL 에서 조회

 

 

 

 

학습한 내용을 정리 정리~

 

 

출처 : 코드로 배우는 스프링 웹 프로젝트

   저자 : 구멍가게 코딩단

Posted by subdong7