일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 웹 스프링
- 스프링
- mariadb # mariadb 다운로드
- 머신러닝
- 개발환경
- 오라클
- 환경구축
- 데이터
- 장고
- MyBatis
- 스프링 검색
- 머신러닝 #머신러닝 종류
- 데이터 베이스
- 데이터마이닝
- 장고 #네비게이션
- 에외처리
- 랜덤포레스트
- DB
- JSP
- 하둡
- 영상처리
- 글쓴이 추가
- 데이터 마이닝
- 환경설정
- 로지스틱
- 페이지 연결
- mvc 구조
- jsp 환경 #환경구축 #웹사이트 구축
- 장고 # 댓글추가
- R 스튜디오
- Today
- Total
공부잡동사니
스프링 검색 기능 추가 본문
•스프링 MVC를 이용하는 웹 프로젝트 전체 구조에 대한 이해
•개발의 각 단계에 필요한 설정 및 테스트 환경
•기본적인 등록, 수정, 삭제, 조회, 리스트 구현
•목록(리스트) 화면의 페이징(paging) 처리
•검색 처리와 페이지 이동
각 영역의 네이밍 규칙
-xxxController: 스프링 MVC에서 동작하는 Controller 클래스
-xxxSerivce, xxxServiceImpl: 비즈니스 영역을 담당하는 인터페이스는 ‘xxxService’라는 방식을 사용하고, 인터페이스를 구현한 클래스는 ‘xxxServiceImpl’이라는 이름을 사용
-xxxDAO, xxxRepository: DAO(Data-Access-Object)나 Repository(저장소)라는 이름으로 영역을 따로 구성하는 것이 보편적. 예제에서는 별도의 DAO를 구성하는 대신에 MyBatis의 Mapper 인터페이스를 활용.
-VO, DTO: VO의 경우는 주로 Read Only의 목적이 강하고, 데이터 자체도 Immutable(불변)하게 설계. DTO는 주로 데이터 수집의 용도
프로젝트 패키지의 구성
프로젝트의 생성및 준비
-Spring Legacy Project의 생성
-pom.xml에서 스프링 버전 변경
-spring-test,spring-jdbc,spring-tx 추가
-junit버전 변경
-Servlet 버전 변경
-HikariCP, MyBatis, mybatis-spring, Log4jdbc 추가
-JDBC드라이버 프로젝트내 추가
-기타 Lombok의 설정 등
Dummy(더미) 데이터의 추가
insert into tbl_board (bno, title, content, writer)
values (seq_board.nextval, '테스트 제목','테스트 내용','user00');
반복적인 실행으로 여러 개의 데이터 생성 및 확인 및 commit
데이터베이스 설정 및 테스트
•root-context.xml
•DataSource의 설정
•SqlSessionFactory 설정
영속 계층 구현
영속 계층의 처리
-테이블을 반영하는 VO(Value Object) 클래스의 생성
-MyBatis의 Mapper 인터페이스의 작성/XML 처리
-작성한 Mapper 인터페이스의 테스트
BoardVO 클래스
Mapper인터페이스
BoardMapper의 테스트
Mapper XML파일
게시물 등록(Create)
-생성된 게시물의 번호를 사용하는지에 따른 구분
-insert만 처리되고 생성된 PK 값을 알 필요가 없는 경우
-insert문이 실행되고, 생성된 PK 값을 알아야 하는 경우
-<selectkey> 사용
BoardMapper.xml
<selectkey>
-SQL이 실행되기 전에 별도의 PK값등을 얻기 위해서 사용
-order=‘before’ 를 이용해서 insert구문이 실행되기 전에 호출
-keyProperty를 통해 BoardVO의 bno값으로 세팅
게시물의 조회(read)
-BoardMapper에 read관련 메서드의 추가
-BoardMapper.xml의 SQL 추가
-테스트를 통한 확인
게시물의 삭제
-BoardMapper인터페이스에 메서드 추가 – 파라미터는 PK
-BoardMapper.xml의 수정
@Service 어노테이션
-@Service는 스프링에 빈으로 등록되는 서비스객체의 어노테이션
-XML의 경우에는 <component-scan>에서 조사하는 패키지의 클래스들 중에 @Service가 있는 클래스의 인스턴스를 스프링의 빈으로 설정
서비스 계층의 구현과 테스트 진행
-원칙적으로는 서비스 계층 역시 Mapper나 DAO와 같이 별도로 테스트를 진행하는 것이 바람직
-하나의 Mapper나 DAO를 이용하는 경우에는 테스트를 생략하는 경우도 많은 편
웹 계층의 구현
-웹 계층에서 가장 먼저 설계하는 것은 URI의 설계
진행 작업의 순서
-목록 페이지 - 모든 진입 경로인 동시에 입력을 가는 링크
-등록 입력/처리 – 게시물 등록 및 처리, 처리후 이동
-조회 – 목록 페이지에서 특정 게시물로 이동
-수정/삭제 – 조회 페이지에서 수정/삭제 선택해 처리
BoardController 목록의 처리
-게시물(BoardVO)의 목록을 Model에 담아서 전달
BoardController의 등록 처리
-POST방식으로 처리되는 데이터를 BoardVO 타입의 인스턴스로 바인딩해서 메서드에서 활용
-BoardService를 이용해서 등록 처리
-‘redirect: ‘를 이용해서 다시 목록으로 이동
등록처리의 테스트
BoardController의 조회/테스트
BoardController의 수정/테스트
BoardController의 삭제/테스트
목록 페이지 작성
-프로젝트의 경로는 ‘/’를 이용하도록 수정
-Tomcat등을 이용해서 실제로 JSP 처리에 문제 없는지 확인후 진행
includes 적용
-JSP페이지의 공통으로 사용되는 페이지의 일부를 header.jsp와 footer.jsp로 분리해서 각 페이지에서 include 하는 방식으로 사용
list.jsp의 적용
목록 화면의 처리
등록 입력 페이지와 등록
-GET방식으로 게시물 등록 화면 제공
-POST방식으로 실제 게시물 등록 처리
-이후 목록 페이지로 이동
참고
한글 깨짐과 필터 설정
UTF-8 필터 처리
•web.xml을 이용한 필터 설정
게시물 작업 이후 재전송
-게시물의 등록, 수정, 삭제의 경우에 해당
-작업이 완료된 후에는 리스트 페이지로 다시 이동
-BoardController에서는 RedirectAttributes의 addFlashAttribute( )를 이용해서 단 한번만 전송되는 데이터 저장후 전송
-JSP등의 화면에서는 JavaScript를 이용해서 경고창이나 모달창등을 보여주는 형식
화면의 처리
작업후 생성되는 결과
일반 호출의 결과
모달창 보여주기
-BoardController에서 특정한 데이터가 RedirectAttribute에 포함된 경우에 모달창을 보여주기
조회 페이지와 이동
-목록에서 특정 게시물 선택후 이동 처리
-조회의 경우는 반드시 GET방식으로만 처리
뒤로 가기와 windo의 history객체
게시물의 수정/삭제 처리
검색의 유형
-제목, 내용, 작성자와 같은 단일 항목
-제목 + 내용, 제목 + 작성자와 같은 복합 항목
-검색 항목에 따라서 매번 다른 SQL이 처리될 필요가 있는 상황
-MyBatis의 동적쿼리기능을 이용해서 처리
•http://www.mybatis.org/mybatis-3/ko/dynamic-sql.html
MyBatis의 동적 태그들
-if
-if 는 test라는 속성과 함께 특정한 조건이 true가 되었을 때 포함된 SQL을 사용하고자 할 때 작성
-choose (when, otherwise)
-if와 달리 choose는 여러 상황들 중 하나의 상황에서만 동작
-trim (where, set)
-trim, where, set은 단독으로 사용되지 않고, <if>, <choose>와 같은 태그들을 내포하여 SQL들을 연결해 주고, 앞 뒤에 필요한 구문들(AND, OR, WHERE 등)을 추가하거나 생략하는 역할
-foreach
-foreach는 List, 배열, 맵 등을 이용해서 루프를 처리
foreach태그
검색조건처리를 위한 Criteria클래스 변경
•검색항목(type)과 검색 키워드(keyword)추가
BoardMapper.xml의 변경
<sql>조각과 <include>
-게시물의 검색과 게시물의 숫자 카운트에 공통으로 사용되므로 <sql>조각으로 분리하고, 필요한 곳에서 <include>하는 방식으로 적용
화면에서의 검색처리
검색이벤트 처리 검색이벤트 처리
검색후 <select> 처리
-‘Search’를 클릭하면 무조건 1페이지로
-이후에는 검색 항목 유지
'개발 > 스프링 웹' 카테고리의 다른 글
스프링 (0) | 2025.04.18 |
---|---|
스프링,오라클 DB 페이지 처리 (0) | 2025.04.18 |
스프링 (0) | 2025.04.18 |
스프핑 페이지 연결 (0) | 2025.04.18 |
spring (0) | 2025.04.18 |