jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

Spring

[Spring] Day12 (Note): 게시판 검색, REST

2022. 3. 31. 23:56

 

2022/3/31

 

게시판 검색

 

1. 검색 조건

*단일 조건 : type이라는 파라미터로 밑에 키워드가 넘어옴

제목 title: T 검색 키워드

내용 content: C

작성자 writer: W

select bno, title, content, writer, regdate, updatedate from

 (select row r, bno, title, content, writer, regdate, updatedate from

(select/*+ INDEX_DESC(board pk_board)*/ bno, title, content, writer, regdate,

updatedate from board

where ${column} like ‘%||#{keyword}%’ //변경되는 부분)

where rownum <= #{pageNum} * #{listQty} )

where r > (#{pageNum} - 1) * #{listQty}

밑줄 부분:

넘어온 데이터가 T일 때:

<choose>

<when test= “type == ‘T’.toString()”> //T를 문자열로 쓸 거라서 투스트링 붙여줌

       title like ‘%||#{keyword}%’

</when>

</choose>

넘어온 데이터가 C일 때:

<when test= “type == ‘C’.toString()”> //T를 문자열로 쓸 거라서 투스트링 붙여줌

       content like ‘%||#{keyword}%’

</when>

넘어온 데이터가 W일 때:

<when test= “type == ‘W’.toString()”> //T를 문자열로 쓸 거라서 투스트링 붙여줌

       writer like ‘%||#{keyword}%’

</when>

 

*test= “조건”

조건은 OGNL 표현식: Object-Graph Navigation Laguage. 객체에 접근하기 위한 언어

예약어를 제외하고는 홑따옴표나 겹 따옴표 없이 문자열이 들어오게 되면 어떤 객체라고 판단

(자바)

map.put(“abc”, “5”); //abc는 5라고 함

->mybatis로 보내줌

<when test= “abc”== ‘5’”>
->홑 따옴표로
묶은 것은 이건 변수/프로퍼티가 아니라고 명시만 해주는 것이지 문자열이라고 명시하는 것은 아니다. 프로퍼티가 아니라고 명시했으니 내부적으로 값을 분석해서 적당한 자료형으로 대체돼서 사용이 되지만, 더 명확하게 명령을 내리기 위해서는 겹따옴표로 묶어서 문자열임을 알려줘야 함.

<when test= “abc”== ‘5’.toString()”>
->
이렇게 하면 빼박 문자열이라는 뜻. 헷갈리지 않게 명확하게 표기.

 

 

*다중 항목 검색

제목 or 내용

제목 or 작성자

제목 or 내용 or 작성자

select bno, title, content, writer, regdate, updatedate from

 (select row r, bno, title, content, writer, regdate, updatedate from

   (select/*+ INDEX_DESC(board pk_board)*/ bno, title, content, writer, regdate,

   updatedate from board

   where ${column} like ‘%||#{keyword}%’ or ${column} like ‘%||#{keyword}%’) --이 부분은 동적 쿼리 이용하여 분기 처      리   //변경되는 부분

  where rownum <= #{pageNum} * #{listQty} )

where r > (#{pageNum} - 1) * #{listQty}

 

*동적 SQL
where ${column} like ‘%||#{keyword}%’ or ${column} like ‘%||#{keyword}%’

<trim prefix= “where” prefixOverrides= “or”>
<if test= “type == ‘T’.toString()”>
 title like ‘%||#{keyword}%’
</if>

<if test= “type == ‘C’.toString()”>
 or content like ‘%||#{keyword}%’
</if>

<if test= “type == ‘W’.toString()”>
 writer like ‘%||#{keyword}%’
</if>


resultTyupe
은 채워주기 set collect은 가져오고 get 11:14분 설명

 

2. REST 방식 (RESTful API)

URL Uniform Resource Locator

URI Uniform Resource Identifier: 자원 식별자

REST: Representatinal State Transfer
하나의 고유한 URI는 하나의 고유한 리소드를 대표하도록 설계한다.

/board/5: 게시글 중 5번 글
/board/content?bno=5 //
원래 했던 방식
/board/content/5 :
파라미터가 주소가 됨

URI
를 GET/ POST/ PUT/ DELETE 뭐로 할 거냐 //2:54

제약 조건:
- client – server
각 파트가 독립적으로 개선될 수 있도록 하자
- statelessness
각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다
- cache
클라이언트는 응답을 캐싱할 수 있어야 한다
-uniform interface
인터페이스의 일관성: 일관적인 인터페이스로 분리되어야 한다
- layered system
요청 정보를 검색하는 데에 관련된 서버의 유형을 클라이언트가 볼 수 없는 계층 구조로 체계화하자
- code on demand
서버에서 클라이언트로 코드를 보내 수행시킬 수 있어야 한다

*uniform interace
-
리소스는 uri로 식별된다. http://루트컨텍스트/메뉴/…id
-
메시지를 통한 리소스의 조작
-hypermedia as the engine of application state (HATEOAS)
-self-descriptive message
메시지는 스스로 설명해야한다
GET/ HTTP/ 1.1
Host: www.naver.com
Content-Type: application/json
HTTP/ 1.1 200 OK
[{“op”: “modify”, “path” : “a/b/c”}] //2:51

https://developers.kakao.com/docs/latest/ko/kakaopay/single-payment


1. REST
관련 어노테이션
@RestController: @Controller + REST: @Controller
에다 @ResponseBody 붙여준 거
@ResponseBody:
컨트롤러에서 JSP 뷰로 전달 x데이터 자체를 전달하기 위한 어노테이션
@PathVariable: URL
경로에 있는 값을 매개변수로 추출할 때 사용
@CrossOrigin: Ajax
의 크로스 도메인 문제를 해결해주는 어노테이션
@RequestBody: JSON
데이터를 원하는 타입으로 바인딩 처리


2. @RestContoller
-
서버에서 응답해주는 것은 순수한 데이터다.

*JSON
데이터를 처리하기 위한 라이브러리.
-jackson-databind:
서버 -> 객체 -> json -> 브라우저
-jackson-dateformat-xml
-gson : Java
객체를 JSON 타입의 문자열로 변환할 때

 

3. REST 파라미터

@PathVariable: 일반 컨트롤러에서도 사용 가능, REST 주로 많이 사용.
URL
경로의 일부를 파라미터 (매개변수)로 사용하고 싶을 때
@RequestBody:
클라이언트가 보내준 JSON 데이터를 원하는 자바 객체로 변환해야 하는 경우 주로 사용
예시:
/sample/shop/{cat}/{pid}

 

4. HTTP 전송 방식

작업    전송방식  스프링 매핑 어노테이션
CREATE  POST        @PostMapping
READ    GET         @GetMapping
UPDATE  PUT         @PutMapping
DELETE  DELETE      @DeleteMapping

*
회원 가입
작업   전송방식     URI
등록   POST         /member/new
조회   GET          /member/{id}
수정   PUT          /memer/{id} + body (json 데이터)
삭제   DELETE       /member/{id}

    'Spring' 카테고리의 다른 글
    • [Spring] Day12 (Code2): pom.xml에 REST JSON 추가, REST JSON
    • [Spring] Day12 (Code1): 게시물 검색
    • [Spring] Day11 (Code): 페이징 처리
    • [Spring] Day11 (Note): 페이징 처리

    티스토리툴바