국비지원/백엔드

230215 JPA 시작

선SEON 2023. 2. 15. 14:02

Java Persistence API (JPA)와 Hibernate

  • 데이터베이스와 자바 객체 간의 상호 작용을 관리하고 객체 지향 프로그래밍과 관계형 데이터베이스 간의 매핑을 위한 기술
  • Hibernate는 JPA의 구현체 중 하나

spring.jpa.hibernate.ddl-auto=update

 

update / create/ create-drop

 

update일 경우에는 행 drop이 안됨

create는 없으면 create하고 시작

 

mtest.html은 모달창 테스트용 선생님 제공 파일

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Modal</title>
<style>
#modal {
	position: relative;
	width: 100%;
	height: 100%;
	z-index: 1;
}

#modal h2 {
	margin: 0;
}

#modal button {
	display: inline-block;
	width: 100px;
	margin-left: calc(100% - 100px - 10px);
}

#modal .modal_content {
	width: 300px;
	margin: 100px auto;
	padding: 20px 10px;
	background: #fff;
	border: 2px solid #666;
}

#modal .modal_layer {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: rgba(0, 0, 0, 0.5);
	z-index: -1;
}
</style>
</head>
<body>

	<div id="root">
		<button type="button" id="modal_opne_btn">모달 창 열기</button>
	</div>

	<div id="modal">
		<div class="modal_content">
			<h2>모달 창</h2>
			<p>모달 창 입니다.</p>
			<button type="button" id="modal_close_btn">모달 창 닫기</button>
		</div>
		<div class="modal_layer"></div>
	</div>

<script>
document.getElementById("modal_opne_btn").onclick = function() {
    document.getElementById("modal").style.display="block";
}

document.getElementById("modal_close_btn").onclick = function() {
    document.getElementById("modal").style.display="none";
}   
</script>

</body>
</html>

 


MyData.java

package com.study.springboot.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Entity //테이블을 의미함
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class MyData {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) // 오토 인크리먼트로 만들어줌
	private Long id; // 위의 어노테이션 두 개는 얘와 관련있음
	private String memo;
	//private String testUp;
	//private String numContent; // 카멜표기하면 중간에 _로 이어짐
} //자동으로 이 이름으로 테이블이 만들어짐

MyDataRepository.java

package com.study.springboot.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.study.springboot.entity.MyData;

@Repository
public interface MyDataRepository extends JpaRepository<MyData, Long> {
	
}

Jpa0215ApplicationTests.java

package com.study.springboot;

import java.util.List;
import java.util.Optional;
import java.util.stream.IntStream;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.study.springboot.entity.MyData;
import com.study.springboot.repository.MyDataRepository;

import lombok.extern.log4j.Log4j2;

@SpringBootTest
@Log4j2
class Jpa0215ApplicationTests {
	@Autowired
	MyDataRepository myDataRepository;

	@Test
	void contextLoads() {
	}

	@Test
	@Disabled
	public void insertTest() {
		IntStream.rangeClosed(1, 10).forEach(t -> {
			// 인서트 구문
			MyData myData = MyData.builder().memo("테스트" + t).build();
			log.info(myData);
			myDataRepository.save(myData);
		});
		// MyData myData = new MyData();	
	}
	
	@Test
	@Disabled
	public void selectAllTest() {
		List<MyData> list = myDataRepository.findAll();
		list.stream().forEach(i->{log.info(i.getMemo());});
	}
	
	@Test
	@Disabled
	public void updateTest() {
		//빌드업 패턴을 이용해서 객체 생성, new로 만들어도 되긴 함
		MyData  myData = MyData.builder().id(10L).memo("연습").build();
		log.info(myDataRepository.save(myData));
	}
	
	@Test
	@Disabled
	public void deleteTest() {
		myDataRepository.deleteById(6L);
	}
	
	@Test
	public void selectOneTest() {
		//MyData myData = myDataRepository.getOne(10L);
		MyData  none = MyData.builder().memo("없음").build();
		Optional<MyData> myData = myDataRepository.findById(34L);
		//optional은 null처리 메소드를 장착, but 불편함
		log.info(myData.orElse(none).getMemo());
	}
}

'국비지원 > 백엔드' 카테고리의 다른 글

230307 JPA -EntityManager, Persistence Context  (0) 2023.03.07
230220 JPA - mappedBy 사용  (0) 2023.02.20
230213 H2 Database 이용  (0) 2023.02.13
230209 Thymeleaf + Bootstrap  (0) 2023.02.09
230207 Spring - JUnit Test  (0) 2023.02.07