기존의 mybatis로 쿼리를 작성하여 테이블을 불러오는 방식을
Jpa로 바꾸어 Board를 불러와 보았다.
우선 boardjpa 만들고 마찬가지로 controller,model,service 디렉토리 또한 만든다.
사실 loginByToken을 구현할때 member에서도 jpa를 사용하기도 하였다.
(member객체 : db테이블에서 선언하는 데이터타입)
BoardJpaController.java에서
경로를 boardjpa로 바꾸어 준다.
package kr.ac.daegu.springbootapi.boardjpa.controller;
import kr.ac.daegu.springbootapi.board.model.BoardDTO;
import kr.ac.daegu.springbootapi.boardjpa.model.Board;
import kr.ac.daegu.springbootapi.boardjpa.service.BoardJpaService;
import kr.ac.daegu.springbootapi.common.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping(value = "/boardjpa")
public class BoardJpaController {
public final BoardJpaService boardJpaService;
@GetMapping(value = "/")
public ApiResponse<BoardDTO> getBoardList(){
List<Board> list = boardJpaService.getBoardList();
return new ApiResponse(true, list);
}
Board.java
테이블의 컬럼들을 선언한 객체이다.
@Entity 어노테이션을 사용하여 이 클래스를 jpa가 관리하도록 만들어 준다. (반드시 써야함)
integer : id값이 어떤 값인지 (참조형), int는 사용할 수 없음.
package kr.ac.daegu.springbootapi.boardjpa.model;
import lombok.*;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalTime;
@Entity
@Getter
@Setter
@Table(name = "board")
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "author")
private String author;
@Column(name = "subject")
private String subject;
@Column(name = "content")
private String content;
@Column(name = "writeDate")
private LocalDate writeDate;
@Column(name = "writeTime")
private LocalTime writeTime;
@Column(name = "readCount")
private Integer readCount;
@Column(name = "commentCount")
private Integer commentCount;
@Column(name = "password")
private String password;
@Column(name = "replyRootId")
private Integer replyRootId;
@Column(name = "depth")
private Integer depth;
@Column(name = "orderNum")
private Integer orderNum;
@Column(name = "isDel")
private String isDel;
public Board(Integer id,
String author,
String subject,
String content,
LocalDate writeDate,
LocalTime writeTime,
Integer readCount,
Integer commentCount,
String password,
Integer replyRootId,
Integer depth,
Integer orderNum,
String isDel) {
this.id = id;
this.author = author;
this.subject = subject;
this.content = content;
this.writeDate = writeDate;
this.writeTime = writeTime;
this.readCount = readCount;
this.commentCount = commentCount;
this.password = password;
this.replyRootId = replyRootId;
this.depth = depth;
this.orderNum = orderNum;
this.isDel = isDel;
}
}
BoardRepository
crud기능을 제공해주는 인터페이스를 불러온다.
BoardService.java
Service까지 입력후 실행을 시켰더니 에러가 발생하였다.
에러의 원인은 컬럼이름의 case형식이 달라 인식하지 못하는 것으로 나타났다.
commentCount, writeTime, writeDate와 같이 지정된 것을 camelcase라고 하는데
jpa를 사용하게 되면 snakecase는 인식하지만 camelcase는 받아들이지 못하기때문에 발생한 문제이다.
application.profiles
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
application.profiles에 다음 코드를 추가하면 에러가 해결이 된다!
'Spring boot' 카테고리의 다른 글
spring boot (.jar파일로 배포) (0) | 2021.11.02 |
---|---|
Springboot (다중 Transactional 처리로직 추가) (0) | 2021.10.27 |
Spring boot (test호출시 sequence diagram) [3] (0) | 2021.10.20 |
Spring boot (test호출시 sequence diagram) [2] (0) | 2021.10.19 |
Spring boot (test호출시 sequence diagram) [1] (0) | 2021.10.19 |