[Spring Boot] - Spring Data JPA

NoowaH·2021년 10월 7일
0
post-thumbnail

👩‍💻 나를 위한 Spring Data JPA DB 연동 및 활용 Cheat Sheet


❔ Spring Data JPA


Spring Boot에서 JPA활용을 위한 Module

XML을 통한 쉬운 JPA 연동 및 환경설정

🙊 default : EntityManager 활성화!!



환경 설정:


Dependencies :

🚩 DB 종류에 따라 MySQL 등 다른 옵션으로 바로 수정 가능



application.properties :

server.port=8089

# jsp - ViewResolver setting
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp


#DataSource Setting
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:xe
spring.datasource.username=SCOTT
spring.datasource.password=TIGER


#JPA Setting
#spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.ddl-auto=none
spring.jpa.generate-ddl=false
spring.jpa.show-sql=true
#spring.jpa.properties.hibernate.format_sql=true
spring.jpa.database=oracle
spring.jpa.database-platform=org.hibernate.dialect.OracleDialect


# Logging Setting
logging.level.org.hibernate=info

🔵 server.port

  • 서버 포트넘버 설정
  • 🙊 프로젝트별로 쉽게 설정 가능

🔵 View Resolver

  • spring.mvc.view.prefix & spring.mvc.view.suffix
  • 기존 Spring Bean Configuration 에서 처리한 ViewResolver API 설정

🔵 JPA Setting

  • JPA persistence.xml 을 사용한 JPA 설정


Entity 예:

package kr.pe.playdata.model.domain;

import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString

@Entity
public class Book {
	
	@Id
	private Long seq; //pk
	private String title;
	private String writer;
	private String content;
	
}

DAO : Repository interface


✅ Interface 개발

CrudRepository 상속

BookReposityory :

package kr.pe.playdata.dao;

import java.util.List;
import org.springframework.data.repository.CrudRepository;
import kr.pe.playdata.model.domain.Book;

public interface BookRepository extends CrudRepository<Book, Long> {
	
	// select * from book where title=?
	List<Book> findBookByTitle(String title);
	
	// 특정 title 이 포함된 게시물 검생
	// select * from book where title like '%?%'
	List<Book> findBookByTitleContaining(String title);
	
}

👀 Spring Data JPA interface CRUD 메소드


  • 저장 : save(Entity)

  • 조회 : findAll() / findAllById([PK, PK...]) &findById(PK)

  • 삭제 : delete(Entity) & deletById(PK)

  • 수정 : Entity.setXxxx() + save(Entity)

    🚩PK 가 존재하는 Entity를 추가 시 save 는 추가 방식이 아닌 수정 방식으로 실행



👀 Interface 추가 메소드 작성


✅ Interface 내부에 조건에 맞춰 작성하면 NamedQuery/ JPQL 처럼 사용이 가능하다

List<Book> findBookByTitle(String title);

  • select * from board where title=?

메소드명 작성 방법:

  • select * from book where title=?

  • find{EntityName}By{EntityName.title}({? 조건})


List<Book> findBookByTitleContaining(String title);

  • select * from book where title like '%?%'
  • find{EntityName}by{EntityName.title}Containing({? 조건})



Entity Controller 기본 설정

package kr.pe.playdata.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class BookController {
    
	public BookController(){
		System.out.println("BookController 생성");
	}
    
    @Autowired
	private BookRepository dao;
    
    ...
    
}

👀 @RestController


  • @Controller + @ResponseBody 의 역할
  • @Controller : View에 표시될 데이터 반환 후 올바른 View를 선택하는 역할
  • @ResponseBody : HTTP Response 데이터를 담아 요청 수행
  • @RestController :
  • REST 방식의 응답처리를 하는 Controller
  • HTTP Response Body가 생성되는 Controller
  • Query String 내부 데이터를 바로 key 갑을 통해 가져올 수 있다
  • Spring4.0 이후 생긴 Annotation


👀DAO Repository 호출

	@Autowired
	private BookRepository dao;

🙊 Java Singleton 디자인 패턴에서 DAO의 Instance화를 통해 Controller에서 사용 하는 흡사한 방식을 쉽게 구현 가능!



profile
조하운

0개의 댓글