https://github.com/loy124/spring-boot-jpa
git 주소
먼저 mySql Workbench에서 스키마(adminstudy 및 table)을 생성해준다
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가 관리하고, 엔티티라 부릅니다.
- @Entity 적용 시 주의사항
- 기본 생성자가 필수(파라미터가 없는 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를 생성해준다
기본 설정은 끝이났다.
다음 게시글에는 해당 설정을 기반으로 Test Code를 작성할 예정이다
'Java > Spring-boot' 카테고리의 다른 글
Spring boot AOP를 활용한 로그 추적하기, 메서드 시간 측정하기 (0) | 2023.07.07 |
---|---|
AOP정의 및 Advice, Pointcut 작성 정리 (0) | 2023.07.06 |
Spring-boot(mysql-mybatis-aws s3(cloudFront) + Vue.js 를 활용한 파일 업로드 하기 - 백엔드 구성 (0) | 2020.04.12 |
Spring-boot(mysql-mybatis-aws s3(cloudFront) + Vue.js 를 활용한 파일 업로드 하기 - 기초 셋팅 (0) | 2020.04.12 |
이클립스(스프링 sts)에서 Spring-boot, Jpa 사용 하기 (2) (0) | 2020.03.15 |