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;
	}


7. Controller

8. 결과 페이지