✅ 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;
}
✅ 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에서 사용 하는 흡사한 방식을 쉽게 구현 가능!