이클립스(스프링 sts)에서 Spring-boot, Jpa 사용 하기 (1)

이클립스(스프링 sts)에서 Spring-boot, Jpa 사용 하기 (1)

https://github.com/loy124/spring-boot-jpa

git 주소

먼저 mySql Workbench에서 스키마(adminstudy 및 table)을 생성해준다

new -project 스프링 스타터를 실행해준다 해당 메뉴들을 모두 체크

src/main/resource에 있는 application.properties(스프링 프로젝트의 설정)에 가서

설정값들을 입력해준다 DB와 spring 프로젝트를 서로 이어주는 jdbc 설정이다

server.port=8081 # adminstudy부분은 데이터베이스의 스키마와 이름이 같아야 한다 spring.datasource.url=jdbc:mysql://localhost:3306/adminstudy?useSSL=false&useUnicode;=true&characterEncoding;=utf8&serverTimezone;=Asia/Seoul # db response name db의 이름 spring.datasource.username=root #db response password db의 비밀번호 spring.datasource.password=root #sql구문이 보이게하는 설정 spring.jpa.show-sql=true

다음

model패키지 안에 User Dto를 생성해준다

JPA는 직접 쿼리문을 작성하지 않더라도

DB 의 create, read, update, delete등 DB를 조작할수 있게 해준다.

요렇게 쓰면 요렇게 들어간다

JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 합니다.

어노테이션을 필수로 붙여야 합니다. @Entity 가 붙은 클래스는 JPA가 관리하고, 엔티티 라 부릅니다.

가 붙은 클래스는 JPA가 관리하고, 라 부릅니다. @Entity 적용 시 주의사항

기본 생성자가 필수 (파라미터가 없는 public 또는 protected 생성자)

(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스에는 사용 불가

저장할 필드에 final 사용 불가

출처: https://velog.io/@conatuseus/%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91

@Id 는 기본키를 사용하는 대상에 사용하며

GeneratedValue(strategy = GenerationType.IDENTITY)는 주로 mysql에서 사용하는 설정으로

id값 설정을 DB에 위임한다는 뜻이다

또한 해당 dto안에 선언한 것들은 모두

database와 이름이 같아야한다 (다만 데이터베이스에서는 phone_number등 snake_case를 사용하고

java에서는 phoneNumber 이라는 camelCase 를 사용하는데 이는 자동적으로 jpa에서 매핑을 해주므로

java 부분에서는 camelCase형식으로 db에서는 snake_case 형식으로 사용하면 된다)

User.java

package com.example.study.model; import java.time.LocalDateTime; import java.util.List; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; //기본 dto 이자 해당내용으로 JPA 매핑 //@Table(name ="user") //class와 Table 이름이 동일하면 지정하지 않아도 된다 @Entity public class User { //기본키 지정 해주는 부분 @ID로 지정해준다 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //@Column(name="account") // 변수와 컬럼의 내용이 다르면 설정하지 않아도 된다 private String account; private String email; private String phoneNumber; //DB에서는 PHONE_NUMBER 로 되어있지만 JPA에서 자동으로 매핑해준다 private LocalDateTime createdAt; private String createdBy; private LocalDateTime updatedAt; private String updatedBy; public User() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public LocalDateTime getCreatedAt() { return createdAt; } public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public LocalDateTime getUpdatedAt() { return updatedAt; } public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; } public String getUpdatedBy() { return updatedBy; } public void setUpdatedBy(String updatedBy) { this.updatedBy = updatedBy; } @Override public String toString() { return "User [id=" + id + ", account=" + account + ", email=" + email + ", phoneNumber=" + phoneNumber + ", createdAt=" + createdAt + ", createdBy=" + createdBy + ", updatedAt=" + updatedAt + ", updatedBy=" + updatedBy + "]"; } public User(Long id, String account, String email, String phoneNumber, LocalDateTime createdAt, String createdBy, LocalDateTime updatedAt, String updatedBy) { super(); this.id = id; this.account = account; this.email = email; this.phoneNumber = phoneNumber; this.createdAt = createdAt; this.createdBy = createdBy; this.updatedAt = updatedAt; this.updatedBy = updatedBy; } }

또한 JPA를 사용하기 위해서는 interface를 하나 생성해줘야 한다

repository pacakage안에 JPARepository를 받는 UserRepository를 생성해준다

해당 부분을 JpaRepository 첫번째인자에는 User dto, 두번째 값에는 기본키로 지정되어있는 ID의 형식을 넣는다

기본 설정은 끝이났다.

다음 게시글에는 해당 설정을 기반으로 Test Code를 작성할 예정이다

from http://loy124.tistory.com/195 by ccl(A) rewrite - 2020-03-15 16:20:24

댓글

이 블로그의 인기 게시물

데이터 바인딩 추상화 - propertyEditor

[sts] spring boot groovy 적용 실행 하기

2020 LCK 롤챔스 Spring 경기 재개 및 일정