서비스레이어 추가, 검색기능 추가1

Hwawon_2·2022년 4월 13일
0

스프링 레이어(계층)


컨트롤러 : 어느 주소로 접속할것인가.
서비스 : 사용자 입장에서 하나의 동작을 정의
DAO(mapper.java) : 쿼리문 실행을 위한 스위치.
xml : 쿼리문 실제 기입된 위치.


사용자가 인식하는 행동 - 실제 구현상의 행동
(하나의 동작) - (쿼리문 여러개를 실행해야함)
글삭제 - 글삭제, 댓글삭제, 파일/이미지 삭제
글쓰기 - 글 insert, 파일 insert

서비스를 먼저 만들겠습니다.
com.ict.service / 우클릭 new / interface / BoardService.java 생성
BoardService.java는 구현 클래스 BoardServiceImpl의 뼈대가 됩니다.

com.ict.service / 우클릭 new / class / BoardServiceImpl.java 생성
BoardServiceImpl.java BoardService 인터페이스 구현

서비스가 DAO(Mapper.java)를 호출한다면 선언을 하고 의존성주입을 해야합니다.

(전체 회원을 보려면, 회원목록을 들고오는 메서드를 실행해야 하고
그러면, 그 메서드를 보유하고 있는클래스를 선언하고 주입해줘야 합니다. DB접근시 사용하는 BoardMapper를 선언하고 주입해줘야 합니다.)

BoardController.java
컨트롤러는 Service만 호출하도록 구조를 바꿉니다.
Service를 BoardController 내부에서 쓸 수 있도록 선언/주입 해주세요.

BoardController.java 에 있는 boardMapper.getList를 살려보도록 하겠습니다.

하기전에
root-context.xml에다가 com.ict.service에 대해서 컴포넌트 스캔을 해줍니다.



빈즈 그래프에 빈이 생기고, s가 생기면 완료!

PageMaker도 SearchCriteria 를 받을수 있게 수정

1.BoardService.java
-인터페이스 내에 먼저 메서드를 선언하고, impl 클래스에서 구현합니다.

2.BoardServiceImpl.java
-리턴자료형이 없는 insert, delete, update 구문은 사용자 행동 기준으로 메서드를 나눕니다.
-리턴자료형이 있는 select 구문은 하나의 메서드가 하나의 메서드가 하나의 쿼리문을 담당합니다.

(select이기 때문에 리턴자료형)

3.BoardController.java

boardMapper.에서 호출하는 것을 service 서비스에서 호출할수 있게 수정 해준다.
= 실행했을때 boardList(목록기능)가 실행되면 성공!


BoardDetail을 서비스 호출 형식으로 변경해보겠습니다.
1.BoardService.java
(boardMapper.select(bno)를 BoardService 인터페이스에 선언만 합니다.)

2.BoardServiceImpl.java
(BoardServiceImpl.java에서 리턴자료형까지 반영해서 BoardMapper쪽 요소를 호출해 리턴합니다.)

3.BoardController.java
(컨트롤러에서 호출로직이 service를 사용하도록 수정)

=실행했을때 글이 들어가면 성공!


BoardInsert을 서비스 호출 형식으로 변경해보겠습니다.
1.BoardService.java
(boardMapper.insert(board)를 BoardService 인터페이스에 선언만 합니다.)

2.BoardServiceImpl.java
(BoardServiceImpl.java에서 BoardMapper쪽 요소를 호출해 리턴합니다.)

(select가 아니라서 리턴 없음)

3.BoardController.java
(컨트롤러에서 호출로직이 service를 사용하도록 수정)

= 실행했을때 글을 쓸수있으면 성공!


BoardDelete,Update을 서비스 호출 형식으로 변경해보겠습니다.
1.BoardService.java

2.BoardServiceImpl.java

3.BoardController.java

= 실행 했을때 글이 지워지고 수정이 되면 성공!


게시판 검색기능 추가하기

요즘 커뮤니티 게시판에서는 대체로 검색기능을 제공합니다.
검색기능은 주로 글쓴이, 제목, 본문, 본문내용에서 찾고싶은 내용을 검색창에 입력하면, 해당 내용이 존재하는 글들로만 다시 정렬하는것을 의미 합니다.

최대 검색 조건을 6개로 해서 작성해보겠습니다.
1. 글쓴이로만 조회
2. 제목만으로 조회
3. 본문만으로 조회
4. 제목 + 본문으로 조회
5. 글쓴이 + 본문으로 조회
6. 글쓴이 + 제목 + 본문 조회

먼저 검색조건도 같이 넘겨야 하기 때문에, 검색에 대한 정보를 포함시켜서 전송할 SearchCriteria를 새로 생성한 뒤 Criteria를 상속해서 사용합니다.
이 객체는 조회타입(searchType), 조회키워드(keyword)를 전달합니다.

com.ict.domain / 우클릭 / class / SearchCriteria 생성
SearchCriteria .java

컨트롤러쪽에서도 Criteria를 사용하는 모든 파라미터를 SearchCriteria 수정

검색창을 만들기 위해 검색조건을 list.jsp에 추가해줍니다.
select 태그 내부의 option 태그를 이용해 검색조건을 명문화 합니다.


실행해보면

옵션에 내가 추가한것들을 확인할 수 있다.

selected 처리

= pageMaker내부에 cri 내부에 searchTyp에 들어온게 eq t 라면 selected를 넣어주고 아니면 '' 빈문자를 넣어주라

form태그 내부에 제출 버튼을 만들어 줍니다.


제목 velog로 검색했을때

searchType=t, keyword=velog 이게 확인이 되면 된다.

페이지에도 키워드가 넘기도록 만들어 보겠습니다.

검색후 다음 페이지로 넘어가도 검색이 유지되어야 하기 때문에 이를 위해 검색단어를 페이지 이동간에도 전달할 수 있도록 수정합니다.
이 작업은 뒤로가기, 앞으로 가기에도 적용해야 합니다.(중요)

밑에 깔아줄 버튼들에 이렇게 추가하면

번호를 눌러도 키워드가 안사라집니다.

이전페이지와 다음페이지에도 키워드와 써치타입이 넘길수 있도록 만들어 보겠습니다.
이전페이지

다음페이지

실행해보면
이전 페이지와 다음페이지를 눌러도 키워드와 써치타입이 그대로인것을 확인할 수 있다.

제목을 눌러도 써치타입 키워드가 넘길수 있도록 수정해보겠습니다.

(앞에 @PathVariable로 시작하기 때문에 ?로 시작)

글을 들어가서도 써치타입 키워드가 유지되는걸 확인가능

profile
코딩 일기장

0개의 댓글