[04-01] MyBatis의 소개와 설정
MyBatis란?
- SQL Mapping Framework - Easy&Simple
- 자바 코드로부터 SQL문을 분리해서 관리
- 매개변수 설정과 쿼리 결과를 읽어오는 코드를 제거
- 작성할 코드가 줄어서 생산성 향상 & 유지 보수 편리
SqlSessionFactoryBean과 SqlSessionTemplate
- SqlSessionFactory : SqlSession을 생성해서 제공
- SqlSession : SQL명령을 수행하는ㄷ 필요한 메서드 제공
- SqlSessionFactoryBean : SqlSessionFactory를 spring에서 사용하기 위한 빈
- SqlSessionTemplate : SQL명령을 수행하는데 필요한 메서드 제공. thread-safe
SqlSession의 주요 메서드
Mapper XML의 작성
< typeAliases>로 이름 짧게 하기
[04-02] MyBatis로 DAO 작성하기
BoardDao의 작성
① DB 테이블 생성
② Mapper XML & DTO 작성
③ DAO인터페이스 작성
④ DAO인터페이스 구현 & 테스트
DTO란? Data Transfer Object
- 계층간의 데이터를 주고 받기 위해 사용되는 객체
#{}와 ${}의 차이
- SQL문 구성 시 #{}는 PreparedStatement 사용, ${}는 Statement 사용
XML의 특수 문자 처리
- MXL내의 특수 문자(<,>,&,...)는 < >로 변환 필요
* CDATA : SQL문 작성시 <![CDATA [ ]]>로 감싸면 안의 쿼리에는 XML코드가 없다는 의미
[04-03~04] 게시판 목록 만들기와 페이징 -TDD
[04-05~06] 게시판curd
기능별 URI정의
- URL : 리소스 경로
- URI : URL + URN(name)
게시물 읽기 기능의 구현
① 게시물 제목
을 누르면 제목에 걸려있는 링크를 따라 GET요청이 감. 게시물 번호 필요
② boardController의 read(Integer bno)메서드가 게시물 번호를 받아서 boardService의 read(bno)를 호출
③ DB는 해당 게시물을 읽어와서 boardDto에 담아줌
④ read메서드가 board.jsp에게 DB에서 읽어온 boardDto를 전달
⑤ boardDto의 제목과 내용을 읽어서 화면에 출력
게시물 삭제 기능의 구현
① 삭제
버튼을 누르면 boardController의 remove(Integer bno)메서드에 삭제할 게시물 번호를 POST요청으로 넘겨줌
② boardController는 boardService의 remove(bno, writer:작성자만 지울수 있기 위해 필요) 메서드를 호출하는데
③ 게시물이 삭제되면 redirect:/board/list로 이동
④ list가 BoardController의 list()메서드를 호출해서 DB의 한 페이지를 요청해서 List< BoardDto>를 가져와 화면을 보여줌
⑤ page와 pageSize를 같이 줘야 원래 보던 페이지로 돌아갈 수 있음
게시물 쓰기 기능의 구현
① 등록
버튼을 누르면 Controller의 @PostMapping된 write()메서드 호출
② write()는 boardService의 write(boardDto)메서드 호출 -> 게시판의 내용이 담긴 boartDto를 DB에 전달. insert SQL문이 실행
③ redirect:/board/list -> write()에 매핑되어 있는 list()가 호출됨 (redirect는 항상 GET)
④ list()가 getPage()를 호출해서 게시물 목록을 가져옴
⑤ 게시물 목록을 화면에 보여줌 -> List<BoardDto)
게시물 수정 기능의 구현
① 수정
버튼을 누르면 Controller의 @PostMapping된 modify()메서드 호출
② modify()는 boardService의 modify(boardDto)메서드 호출 -> 게시판의 내용이 담긴 boartDto를 DB에 전달. update SQL문이 실행
③ redirect:/board/list -> modify()에 매핑되어 있는 list()가 호출됨 (redirect는 항상 GET)
④ list()가 getPage()를 호출해서 게시물 목록을 가져옴
⑤ 게시물 목록을 화면에 보여줌 -> List<BoardDto)
[04-07~08] 게시판 검색 기능 추가하기
⛔ <c:out /> ⛔
[04-09] REST API와 Ajax
JSON이란?
- Java Script Object Natation : 자바 스크립트 객체 표기법
stringify()와 parse()
- JS객체를 서버로 전송하려면, 직렬화(문자열로 변환)가 필요
- 서버가 보낸 데이터(JSON문자열)를 JS객체로 변환할 때, 역직렬화가 필요
JSON.stringify() - 객체를 JSON 문자열로 변환(직렬화. JS객체->문자열)
JSON.parse() - JSON문자열을 객체로 변환(역직렬화, 문자열->JS객체)
Ajax란?
- Asynchronous javascript and XML : 요즘은 JSON을 주로 사용
- 비동기 통신으로 데이터를 주고 받기 위한 기술
- 웹페이지 전체(data + UI)가 아닌 일부(data)만 업데이트 가능
⛔ 동기 vs 비동기 ⛔
jQuery를 이용한 Ajax
Ajax요청과 응답 과정
@RestController
- @ResponseBody 대신, 클래스에 @RestController 사용 가능
REST란?
- Roy Fielding이 제안한 웹서비스 디자인 아키텍쳐 접근 방식
- 프로토콜에 독립적이며, 주로 HTTP를 사용해서 구현
- ⭐리소스 중심의 API 디자인 : HTTP메서드로 수행할 작업을 정의
REST API란?
- Representational State Transfer API : REST규약을 준수하는 API
RESTful API 설계
[04-10] 댓글 기능 구현 - DAO 작성
① DB테이블 생성
② Mapper XML 작성
③ DAO 작성 & 테스트
④ Service 작성 & 테스트
⑤ Controller 작성 & 테스트
⑥ 뷰(UI)작성 & 테스트
[04-11] 댓글 기능 구현 - Controller 작성
[04-12] 댓글 기능 구현 - UI 작성
[04-13] 댓글 기능 구현 - 대댓글