본문 바로가기

Java/Spring-boot

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

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

 

loy124/spring-boot-jpa

spring boot jpa 기초 CRUD 해보기. Contribute to loy124/spring-boot-jpa development by creating an account on GitHub.

github.com

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가 관리하고, 엔티티라 부릅니다.
  • @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를 생성해준다

 

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

 

기본 설정은 끝이났다. 

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