entityManager.persist(엔티티) 를 하면 영속성 컨텍스트의 1차 캐시에 저장된다
(DB저장은 안됨) commit 시점에 영속성 컨텍스트에 있는 정보들이 DB에 쿼리로 날라감
조회를 할 경우 1차 캐시에 없을 경우 DB에서 직접 조회하고 1차 캐시에 저장 후 반환한다. 있는 경우에는 1차 캐시에 존재하는 해당 엔티티를 바로 반환
=> 요청이 시작되면 영속성 컨텍스트를 생성하고 끝나면 영속성 컨텍스트를 지우기 때문에 이때 1차 캐시도 삭제됨 따라서 애플리케이션 전체에서 공유하는 것이 아니다
function writeAticle() {
$.ajax({
type: "POST",
url: "/article",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({content: $("#content").val()}),
success: function (response) {
$("#content").val('');
if(confirm("저장된 메시지를 확인하시겠어요?")) {
readAticle(response['id'])
}
}
})
}
function readAticle(id) {
$.ajax({
type: "GET",
url: `/article/${id}`,
success: function (response) {
console.log(response['content']);
$("#acticle").html(response['content']);
//article 태그의 내용을 가져와서 바꿈
}
})
}
package com.sparta.springtest.controller;
import com.sparta.springtest.domain.entity.Board;
import com.sparta.springtest.dto.BoardDto;
import com.sparta.springtest.repository.BoardRepository;
import com.sparta.springtest.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class Boardcontroller {
private final BoardService boardService;
@PostMapping("/article")
public Board setBoard(@RequestBody BoardDto boardDto){
return boardService.setBoard(boardDto);
}
@GetMapping("/article/{id}")
public Board getBoard(@PathVariable Long id){
return boardService.getBoard(id);
}
}
package com.sparta.springtest.dto;
import com.sparta.springtest.domain.entity.Board;
import lombok.*;
import java.time.LocalDateTime;
@Getter
@Setter
public class BoardDto {
private String content;
}
package com.sparta.springtest.service;
import com.sparta.springtest.domain.entity.Board;
import com.sparta.springtest.dto.BoardDto;
import com.sparta.springtest.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
@RequiredArgsConstructor
@Service
public class BoardService {
private final BoardRepository boardRepository;
public Board setBoard(BoardDto boardDto){
Board board = new Board();
board.setContent(boardDto.getContent());
//boardDto로 받아온 데이터를 board 엔티티에 저장
boardRepository.save(board);
return board;
}
public Board getBoard(Long id){
return boardRepository.findById(id).get();
}
}
import lombok.Setter;
import javax.persistence.*;
@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class Board extends Timestamped {
// ID가 자동으로 생성 및 증가합니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
// 반드시 값을 가지도록 합니다.
@Column(nullable = false)
private String content;
}
package com.sparta.springtest.repository;
import com.sparta.springtest.domain.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
}