2021.06.20
41번째 포스팅
입사 104일 차.
이제 모든 준비가 끝났다. View에서 사용자의 요청을 받아 DB의 데이터에 변형을 주는 작업만이 남아있다.
오늘은 Service, Repository를 만들어서 DB와 Spring을 연결해보려고 한다.
아래에 작성하는 내용들은 5일 차까지 똑같이 작성했다는 전제가 깔려있다.
1. Spring MVC 모델 데이터의 흐름
① Spring Framework안의 데이터는 정해진 흐름대로 흘러가야 한다.
② View(화면) > Controller > Service > Repository > MyBatis(Mapper) > DB(MySQL)의 순서대로 데이터는 이동한다.
③ 반대로 SELECT 쿼리를 작성해서 DB의 데이터를 View로 가져오는 경우,
DB > MyBatis(Mapper) > Repository > Service > Controller > View(동적 페이지)의 역순으로 진행된다.
④ SELECT를 이용해서 가져오는 데이터를 View에 표시하려면 View는 동적 페이지가 되어야 한다.
2. Repository
① Service와 MyBatis(Mapper.xml)의 중간에 위치한다.
② MyBatis에 작성한 쿼리가 실행될 수 있도록 메소드를 작성한다.
③ @Mapper 또는 @Repository 어노테이션을 선언해서 Repository임을 명시해준다.
④ dao, mapper, repository 모두 같은 의미로 사용된다. 프로젝트마다 패키지 이름이 다르다.
⑤ repository ( 또는 dao, mapper ) 패키지에 인터페이스를 만들어준다.(**은 사용자가 만드는 패키지입니다.)
경로 : src/main/java/com/example/프로젝트명/**/repository/
※ 저는 src/main/java/com/example/프로젝트명/admin/repository/TableMapper.java를 만들었습니다.
⑤ 메소드의 자료형은 MyBatis에 작성한 ResultType을 일치시켜주고,
메소드의 이름은 MyBatis에 작성한 id와 일치시켜줘야 한다.
3. Service
① Controller와 Repository의 중간에 위치한다.
② 많은 작업보다는 세션을 관리하거나 Controller와 Repository를 연결해준다.
③ Service는 구현하는 것이 일반적이지만, 구현하지 않은 프로젝트도 있다.
④ Service 패키지에 인터페이스와 클래스를 만들어준다.
⑤ Service Interface에 작성하는 메소드는 Repository Interface와 똑같이 작성하면 된다.
(**은 사용자가 만드는 패키지입니다.)
경로 : src/main/java/com/example/프로젝트명/**/service/
※ 저는 src/main/java/com/example/프로젝트명/admin/service/TableService.java를 만들었습니다.
4. ServiceImpl
① @Service 어노테이션을 선언해서 Service임을 명시해준다.
② Service에 작성한 메소드를 구현하는 클래스다. (Interface는 구현, Class는 상속)
③ 클래스 이름 옆에 implements 인터페이스명 을 작성해준다.
④ 메소드를 구현한 뒤, 클래스 이름에 마우스를 대고 있으면 아래와 같이 메세지박스가 표시된다.
이때, Add unimplemented methods를 클릭하면 에러메세지가 사라진다.
⑤ 구현한 메소드의 Body를 작성해준다.
작성하는 메소드 Body는 @Repository의 Interface와 연결해주는 코드를 작성한다.
⑥ Repository Interface는 @Autowired 어노테이션을 이용해 연결해준다.
(**은 사용자가 만드는 패키지입니다.)
경로 : src/main/java/com/example/프로젝트명/**/service/
※ 저는 src/main/java/com/example/프로젝트명/admin/service/TableServiceImpl.java를 만들었습니다.
다음포스팅의 주제
'포트폴리오 > CCS' 카테고리의 다른 글
[프로젝트/JAVA] 7일차 - form태그를 활용한 INSERT - 1 (0) | 2021.06.26 |
---|---|
[프로젝트/JAVA] 6일차 - Controller, View (0) | 2021.06.25 |
[프로젝트/JAVA] 6일차 - MyBatis(Mapper.xml) (2) | 2021.06.16 |
[프로젝트/JAVA] 6일차 - 템플릿엔진(Thymeleaf) (0) | 2021.06.14 |
[프로젝트/DB] 5일차 - INSERT, UPDATE, SELECT, DELETE (0) | 2021.06.06 |
댓글