WEB/Spring

Mapper Interface?

면접보기 위해 과제를 해야 했다.

프로젝트를 파일을 받았는데 계속 구현해오던 구조와는 많이 달라서 시간을 많이 썼다.

하지만 역시나 인터넷을 자세히 보고 엄청난 시행착오를 한 후에 적응할 수 있었다.

언제 다시 쓸 수 있을지 몰라 기록해 두기로 했다.

 

Mapper의 SQL ID와 Mapper Interface의 메서드명과 정확히 매칭해준다면 자바에서 메서드를 호출하기 때문에

오타에 대한 걱정이 없다. 

 

 

개발을 배우면서 쓰던 구조는 대충 이런식이었다.

그러나 이번에 받은 과제는 Mapper Interface, Service class, sql.xml 이렇게 3가지로 있었다.

 

처음 본 구조

1.propertis에서 알리아스를 이용해 sql에서 dto로 연결해주던 것을 annotation을 사용하면 아주 간단하게

사용이 가능합니다.

 

<사용 하던 구조>

이전에 사용하던 mapper.xml에서 풀네임을 사용하지 않도록 alias를 사용해주는 모습니다.

 

어노테이션을 활용

<처음 본 구조>

어노테이션을 사용하기 위해 dto class에 Alias를 사용해주었다.

사용법은 아래와 같습니다.

 

 

 

 

우선 sqlSessionFactory를 정의해둔 context파일에서 위에 <property name="typeAliasesPackage" value="패키지" />

해당 dto를 포함한 패키지를 value로 두고 property를 추가 해준다면 사용이 가능합니다.

먼저 dto or vo에 @Alias를 정의해주신 다음에 해당 mapper.xml로 이동하셔서 필요한

resultType이나 parameterType에 정의 해주시면됩니다!

 

2.이때 namespace와 Mapper Interface와 이름을 같게 해야합니다.

 

namespace = com.(  ).potal.user.mapper.UserMapeer 

 

3. interface안에 메서드 이름과 mapper.xml id와 이름이 같아야 합니다.

위에 id = selectUser가 있다면 Interface안에 public List<UserVO> selectUser(); 이렇게 메서드를 만들어주면 됩니다.

 

4.그 Interface를 Service가 상속받아 Override를 이용하여 구현 합니다!

다음에, @Autowired를 이용하여 Mapper Inteface를 bean으로 등록해줍니다.

 

이렇게 하면 추가, 수정 할때 xml, Interface, service만을 이용하면 됩니다.