20.02.19 Spring과 Mybatis...
20.02.19 Spring과 Mybatis...
mybatis 사용을 위해서는 resources 폴더 내 mapper 폴더를 생성하고 xml 파일을 생성한다.
이후 doctype을 mapper 타입으로 정의해주어야 한다.
mapper 태그를 이용하여 namespace 속성에 맵퍼 인터페이스를 지정해주어 상호 연동을 시켜주어야 한다.
CRUD 등 CRUD의 원하는 부분을 정의할 때 각각의 태그를 이용하여 정의할 수 있다.
,,, 태그를 이용하여 감싸주고 내부에 쿼리를 작성한다.
id는 인터페이스에서 구현할 메소드의 명이 된다. resultType 속성에는 dto(vo 또는 domain)의 경로를 지정해준다.
mybatis configuration을 위해 config 영역을 담당할 패키지를 생성하고
내부에 클래스파일을 생성한다.
annotation 을 통해 configuration 영역임을 표시해주고, mapperscan 어노테이션 괄호에 패키지명을 작성해주면 mapper 패키지의 mapper를 검색하여 연결해주게 된다.
설정을 위한 클래스 내에 @bean을 통해 메소드를 정의하게 되면, 해당 annotation 설명에는 이렇게 뜬다.
Indicates that a method produces a bean to be managed by the Spring container.
구글 번역 : 메소드가 Spring 컨테이너가 관리 할 Bean을 생성 함을 나타냅니다.
Spring container가 관리해주는 Bean을 생성하는 메소드라고 생각하면 될 것 같다.
이것은 MVC pattern의 context.xml과 해당 서비스를 위해 인터페이스를 생성하고 그 인터페이스를 구현하는 클래스에서 사용됐던 connection pool과 dto, dao를 한 번에 관리해줄 메소드를 생성하는 것 같다.
서비스를 구현할 때 이제 Autowired annotation을 통해 필드를 생성해주면,
Spring에서 memberMapper에 대한 부분을 자동으로 Singletone 형태로 구현해준다고 생각된다.
풀어보면 위의 config 영역에서 경로를 참조하여 mapper xml을 검색하고 xml 내 namespace에 지정된
Mapper Interface가 있는 패키지 경로를 통해 xml의 select 태그 내의 쿼리를 날려주는 메소드를
MemberMapper Interface의 추상 메소드를 구현하여 service 클래스의 annotation autowired로 지정해둔 memberMapper 필드에 해당 객체의 주소값을 담아주는 것 같다.
쿼리를 실행한 결과는 List 형태로 담겨 있고..
결과적으로 Controller 상에서 memberService를 연결시켜주면 다시 한 번 memberService가 Singletone 형태로 구현되고 memberService 내에서도 select 쿼리의 결과를 담고 있는 list가 있는 MemberMapper가 있기 때문에 우리가 원하는 쿼리 결과를 list형태로 가져올 수 있는 것 같다.
(위를 보면 service 클래스에서 return 해줄 mlist에 MemberMapper 에서 실행된 결과 리스트를 담아놨다.)
이제 model을 통해 addattribute메소드를 통해 회원리스트인 mlist를 담았다. 이름은 list로 하여..
이 addattribute로 넘기는 부분은 mvc pattern을 통해 구현할 때 보았던 request.addattruibute와 같다고 생각한다.
그리고 view에서 구현해줄 부분을 thymeleaf를 통해 출력시키도록 하였다.
thymeleaf에서 addattribute의 네이밍으로 지정된 list를 받아 각 list 내 dto Member 객체들의 필드에 직접 접근할 수 있기 때문에 alias를 설정해 두어 m.mId 등으로 표시해 줄 수 있는 것이다.
정확하지도 않고 일단 배운 것을 토대로 끼워맞추기 식으로 생각해 본 것이지만 마냥 새롭게만 느껴지는 Spring을 조금이라도 배웠던 부분과 일치하게 생각해 보고 싶었다.
from http://niria.tistory.com/33 by ccl(A) rewrite - 2020-03-06 15:55:03
댓글
댓글 쓰기