Back End/JPA
JPA 실습 복습하기
HSWSH
2023. 6. 9. 20:06
1. 프로젝트 생성
(추후 사진 추가)
2. 파일 구조
3. application.properties 설정
server.port=8088
server.servlet.context-path=/jpa
# thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.view-names=thymeleaf/*
# db
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/erp?serverTimezone=UTC
spring.datasource.username=erp
spring.datasource.password=erp
# jpa
# log
logging.level.org.hibernate.sql=debug
logging.level.org.hibernate.type.descriptor.sql=trace
#자동으로 만들어지는 sql을 보겠다는 의미
spring.jpa.show-sql=true
#자동으로 테이블을 만들어주는 코드를 사용하지 않겠다는 설정
spring.jpa.hibernate.ddl-auto=none
4. DTO 설정
- JPA에서 관리하기 위해 @Entity를 붙여준다.
- 자동으로 테이블의 기본키에 매핑해 주기 위해 @Id를 붙여준다.
BoardDTO.java
package com.multi.jpaProPractice.domain;
import java.sql.Date;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.annotation.JsonFormat;
@Entity
public class BoardDTO {
@Id
String board_no;
String id;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
Date write_date;
String title;
String content;
String category;
// 클라이언트가 전송하는 바이너리 데이터를 스프링MVC가 내부에서 MultipartFile객체로 만들어서 정의
// 첨부팡틸리 여러 개인 경우 List에 넣거나 배열로 관리
// MultipartFile[] files;
List<MultipartFile> files;
// 기본 생성자
// 생성자
// toString
// Setter, Getter
}
Dept.java
package com.multi.jpaProPractice.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Dept {
@Id
private String deptno;
private String deptname;
private String deptStartDay;
private String deptEndDay;
private String deptlevel;
private String deptstep;
private String deptuppercode;
private String job_category;
private String mgr_id;
private String deptaddr;
private String depttel;
// 기본 생성자
// 생성자
// toString
// Setter, Getter
}
5. ServiceImpl
package com.multi.jpaProPractice.exam;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.multi.jpaProPractice.domain.BoardDTO;
import com.multi.jpaProPractice.domain.Dept;
@Service
public class JPAServiceImpl implements JPAService {
JPADAO dao;
@Autowired
public JPAServiceImpl(JPADAO dao) {
super();
this.dao = dao;
}
@Override
public BoardDTO board_insert(BoardDTO board) {
return dao.board_insert(board);
}
@Override
public Dept getDept(String deptno) {
return null;
}
@Override
public void update(BoardDTO updatedata) {
}
@Override
public List<BoardDTO> findAll() {
return dao.findAll();
}
@Override
public Optional<BoardDTO> getBoard(String board_no) {
return null;
}
@Override
public List<BoardDTO> findAll(int pageNo) {
return null;
}
}
6. DAOImpl
- EntityManager 생성
package com.multi.jpaProPractice.exam;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.multi.jpaProPractice.domain.BoardDTO;
import com.multi.jpaProPractice.domain.Dept;
@Repository
public class JPADAOImpl implements JPADAO {
private EntityManager entityManager;
@Autowired
public JPADAOImpl(EntityManager entityManager) {
super();
this.entityManager = entityManager;
}
@Override
public BoardDTO board_insert(BoardDTO board) {
// JPA에서 엔티티를 영속적으로 저장하고 데이터베이스에 삽입하는 역할을 수행하는 메서드
entityManager.persist(board);
// 저장된 board 엔티티를 반환
return board;
}