DevKim
[Spring] CRUD - H2 DB 웹콘솔로 확인해보기 본문
일단 학습을 위해, In-memory DB인 H2 DB를 사용하여 웹콘솔로 CRUD 되는 것을 확인해보았다.
(+) DB의 기본인 생성일자와 수정일자도 추가해줌
먼저 웹콘솔로 보이게하기 위해 다음과 같은 코드를 추가해준다.
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
CRUD를 위해 먼저 생성해야하는 것
1. repository -> extends JpaRepository 하면 됨
2. update을 위한 service package
학습 기록용 이기에.. 이런 부분들에 대해선 자세히 서술하진 않겠다.
[1] Create
repository.save(new Course("스프링 연습하기","홍길동"));
+) 생성일자,수정일자 추가
생성일자와 수정일자를 추가해주기 위해 TimeStamped 라는 class를 만들어, 상속을 통하여 가져다 사용하였다.
//Timestamped.java
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Timestamped {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
@MappedSuperclass
: 클래스를 상속했을 때 해당 멤버변수를 칼럼으로 인식해줌
@CreatedDate
: 생성일자를 나타냄
@LastModifiedDate
: 수정일자를 나타냄
* 상속으로만 사용할 수 있도록 abstract로 선언
[2] Read
데이터를 읽어오는건 간단하다.
findAll로 모든 데이터를 쭉 긁어오거나, findById를 이용해 특정 id값의 데이터만 가져오는 것이다.
//Read All
System.out.println("데이터 전부 인쇄");
List<Course> courseList = repository.findAll();
for (int i = 0; i < courseList.size(); i++) {
Course c = courseList.get(i);
System.out.println(c.getId());
System.out.println(c.getTitle());
System.out.println(c.getTutor());
}
//Read only one
System.out.println("아이디가 1인 값만 인쇄");
Course c = repository.findById(1L).orElseThrow(() -> new NullPointerException("id 존재하지 않음"));
System.out.println(c.getTitle());
System.out.println(c.getTutor());
[3] Update
-main class에 update 메소드를 추가해주어야한다.
//Course.java
public void update(Course course){
this.title = course.title;
this.tutor = course.tutor;
}
생성한 Service package안에 CourseService.java 를 생성해주었다.
//CourseService.java
@RequiredArgsConstructor
@Service
public class CourseService {
private final CourseRepository courseRepository;
//update
@Transactional
public Long update(Long id, CourseDto courseDto)
{
//id를 통해 찾기
Course course1= courseRepository.findById(id).orElseThrow(()->new NullPointerException("해당 값은 존재하지 않음"));
course1.update(courseDto);
return course1.getId();
}
}
@RequiredArgsConstructor
: final로 선언한 repo의 기본 생성자를 제공하는 Lombok
@Transactional
:SQL 쿼리가 일어나야함을 스프링에게 알려줌. 자동으로 DB에 적용됨
*findById를 통해 id로 특정 값을 찾을 땐 반드시 orElseThrow로 예외처리에 대한 대처사항을 적어줘야한다.
*Dto를 따로 생성하여 이것으로 데이터를 주고 받는다.
//Application.java
courseService.update(1L, new_course); //id=1인 데이터 update
[Application]
-update 할 id와 대상 전달
[Service]
update할 object 찾음 -> object의 update 메소드에 전달
[Course.java]
해당 데이터로 update
[4] DELETE
courseRepository.deleteAll();
'Spring Boot' 카테고리의 다른 글
[JPA] Query 생성 - between method (0) | 2021.04.23 |
---|---|
[Spring] REST API 만들기 (0) | 2021.04.13 |
CommandLineRunner,@Bean,@Component (0) | 2021.04.08 |
[H2] H2 DB에 테이블 생성,삽입,조회 (0) | 2021.04.04 |
[DB] RDBMS - H2 생성,삽입,조회 (0) | 2021.04.02 |