SlideShare a Scribd company logo
Spring Data JPA
발표자 소개
• 이름 : 김영한
• 소속 : SK Planet
목차
•이야기
•Spring Data 빨리 소개
•Spring Data JPA 소개
•사용 경험
•주의 사항
옛날 옛적에...
자바당 정파의 무술
Enterprise Java Beans
EJB 참 쉽죠잉~

낚시 전문 나영업
EJB 지옥
EJB 지옥
스프링
•현재 EJB 컨테이너 대체
•단순함의 승리
하이버네이트
•EJB 엔티티빈 기술을
대체

•JPA(Java Persistence
API)라는 새로운 표준 정
의
하이버네이트

EJB 엔티티빈

등장

JPA

표준정의
표준 인터페이스
JPA

하이버네이트

EclipseLink

JPA 구현체들

OpenJPA
통계
잠깐만요!
제 주위에는 하이버네이트
안쓰는데요?
ZEROTURNAROUND
통계
•JRebel 만든 곳
•서버를 중단하지 않고 클래스 파일 대체, 프
레임워크에 따라 수정이 많음

•전 세계 자바 사용자들이 어떤 프레임워크를
사용하는지 가장 민감한 회사
2011
2012
2012
De facto
사실상 표준

Spring
JPA
Hibernate
Spring Data
관계형 데이터베이스 세상
신흥 세력의 등장
Spring Data
Spring Data
단순한 통합 그 이상
•CRUD + 쿼리
•동일한 인터페이스
•페이징 처리
•메서드 이름으로 쿼리 생성
•스프링 MVC 에서 id 값만 넘겨도 도메인 클
래스로 바인딩
잠깐만요!
Spring Data 만 알면 다 된
다는 이야기?
이거면 다 되나요?

•이건 자바를 모르고 스프링을 사용하는 것과
같음

•해당 기술을 아는 사람이 편하게 사용하려고
쓰는 것
Spring Data JPA
오늘의 주제
혹시 JPA 처음이신 분을
위해
순수 JDBC
public Long save(Connection conn, Member member) {
PreparedStatement pstmt = null;
String sql = "INSERT INTO MEMBER(USERNAME, PHONE_NUMBER) VALUES (?, ?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, member.getUsername());
pstmt.setString(2, member.getPhoneNumber());
pstmt.executeUpdate();
ResultSet generatedKeys = pstmt.getGeneratedKeys();
if (generatedKeys.next()) {
long memberId = generatedKeys.getLong(1);
return memberId;
}
return null;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
close(pstmt);
}
}
SpringDataJPA - 스프링 캠프
Spring JdbcTemplate
Spring

Spring-Jdbc
Spring JdbcTemplate
public Member findOne(Long id) {
String sql = "select MEMBER_ID as id, USERNAME, PHONE_NUMBER from MEMBER where id = ?";
Member member = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Member>(), id);
return member;
}
Spring + JPA
Spring

JPA
Spring + JPA
@Repository
public class MemberRepository {
@PersistenceContext
EntityManager em; //컨테이너 주입
public Long save(Member member) {
em.persist(member);
return member.getId();
}
...
Spring + JPA
Spring

JPA
Spring Data JPA
Spring

Spring Data
JPA

JPA
Spring Data JPA
public interface MemberRepository extends JpaRepository<Member,Long>
{

//실제 아무것도 없음.

}
JpaRepository 인터페이스

•<S extends T> S save(S entity)
•void delete(ID id)
•T findOne(ID id)
•Iterable<T> findAll()
•long count()
•기타 등등...
잠깐만요!
인터페이스를 구현한 클래스
가 없는데요?
Spring Data JPA 원리
<Interface>
MemberRepository

구현 클래스 생성

MemberRepository구현클래스
Spring Data JPA 기능
메서드 이름으로 쿼리생성
public interface MemberRepository extends Repository<Member, Long> {
List<User> findByEmailAndName(String email, String name);
}

[생성된 JPQL]
select m from Member m
where m.email = ?1
and m.name = ?2
메서드 이름으로 NamedQuery 호출
[XML에 작성한 NamedQuery]
<named-query name="User.findByLastname">
<query>select u from User u where u.lastname = ?1</query>
</named-query>
[어노테이션으로 작성한 NamedQuery]
@Entity
@NamedQuery(name = "User.findByEmailAddress",
query = "select u from User u where u.emailAddress = ?1")
public class User {
}
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastname(String lastname);
User findByEmailAddress(String emailAddress);
}
@Query
[인터페이스에 쿼리작성 가능]
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
[JPA 네이티브 쿼리 지원]
public interface UserRepository extends JpaRepository<User, Long> {

}

@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?0", nativeQuery = true)
User findByEmailAddress(String emailAddress);
@Modifying
[수정 쿼리도 직접 정의 가능]
@Modifying(clearAutomatically = true)
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
Specification 지원
Specfication(DDD)
 
 
 
 
 

SpecificationMember
 firstNameLike
 =
 MemberSpecs.isFirstName(김);
SpecificationMember
 ageBetween
 =
 MemberSpecs.ageBetween(20,
 40);
SpecificationsMember
 specs
 =
 
Specifications.where(firstNameLike).and(ageBetween);
 
 
ListMember
 list
 =
 memberRepository.findAll(specs);
그냥 API 보세요!

http://docs.spring.io/spring-data/jpa/docs/
1.4.1.RELEASE/reference/html/jpa.repositories.html
Spring Data JPA 경험
컴퓨터가 할일은
컴퓨터가 하도록

무림 지존
요다 스님
팀 프로젝트

작은 거

중간 거

큰거
팀 주요 프레임워크
데이터 저장 레이어
SpringDataJPA
JPA
하이버네이트
Thymeleaf

스프링MVC
스프링

QueryDSL
도입시 경력별 반응

신입

2년~

10년~
장점
•코딩량
•도메인 클래스를 중요하게 다룸
•비지니스 로직 이해 쉬움
•더 많은 테스트 케이스 작성 가능
장점
•진짜 진짜 편함. 과거로 돌아가라면 ...
•너무 복잡할 땐 SQL 사용
•비지니스 로직에 집중
Spring Data JPA 주의
SpringDataJPA
무조껀 사용
만병통치약임

p
실제 사용해보면
ORM 기술
다시는 안쓴다!
Spring Data
JPA
HIBERNATE

JDBC
DB
취급 주의!
•JPA(하이버네이트) 모르면 절대 쓰지마세요.
•본인 먼저 JPA 마스터
•데이터베이스 설계 마스터
•Spring Data JPA 는 단지 거들 뿐.
•대부분의 문제는 JPA 를 모르고 사용해서 발생
JPA 학습곡선은 아주 높다.
우리팀 사례
•오픈전 성능검수
•단순한 기능인데 성능이 너무 안나옴
(30TPS)

•신입의 JPQL 막쿼리 (지못미 ㅠㅠ)
•잘못된 로딩 전략 설정

More Related Content

PDF
Ksug2015 - JPA3, JPA 내부구조
PDF
Pháp luật việt nam về xác lập quyền sở hữu theo thời hiệu luận văn th s. lu...
PDF
Luận văn: Pháp luật về xác lập quyền sở hữu theo thời hiệu, HAY
PDF
Giải quyết tranh chấp về tài sản thế chấp để bảo đảm tiền vay Ngân hàng - Gử...
PDF
Đề tài: Chế tài liên quan tới hạn chế cạnh tranh ở Việt Nam, HOT
PDF
Pháp luật về nhà ở cho người Việt Nam định cư ở nước ngoài, 9đ
PDF
Luận văn: Quyền của người chuyển giới ở Việt Nam hiện nay, 9đ - Gửi miễn phí ...
PDF
Tu hoc-600-chu-kanji-co-ban-doc-thu
Ksug2015 - JPA3, JPA 내부구조
Pháp luật việt nam về xác lập quyền sở hữu theo thời hiệu luận văn th s. lu...
Luận văn: Pháp luật về xác lập quyền sở hữu theo thời hiệu, HAY
Giải quyết tranh chấp về tài sản thế chấp để bảo đảm tiền vay Ngân hàng - Gử...
Đề tài: Chế tài liên quan tới hạn chế cạnh tranh ở Việt Nam, HOT
Pháp luật về nhà ở cho người Việt Nam định cư ở nước ngoài, 9đ
Luận văn: Quyền của người chuyển giới ở Việt Nam hiện nay, 9đ - Gửi miễn phí ...
Tu hoc-600-chu-kanji-co-ban-doc-thu

What's hot (20)

PDF
Đề tài: Vi phạm điều kiện kết hôn của đồng bào dân tộc thiểu số
DOC
BÀI MẪU luận văn giải quyết tranh chấp cho thuê tài sản, HOT
PDF
Luận văn: Các căn cứ quyết định hình phạt theo pháp luật hình sự
DOCX
Cơ sở lý luận về công ty trách nhiệm hữu hạn một thành viên.docx
PDF
The Full Stack Java Developer - Josh Long
PDF
Toi pham hoc duong dai, Duong Tuyet Mien.pdf
DOCX
Bài Tiểu Luận Môi Trường Đề Tài Sinh Thái Biển, 9 Điểm.docx
PDF
Luận văn: Tội trộm cắp tài sản theo pháp luật hình sự Việt Nam
PDF
Thu thập, sử dụng chứng cứ trong điều tra vụ án giết người, HAY
PDF
Luận văn: Pháp luật về sở hữu nhà ở của người Việt Nam định cư ở nước ngoài v...
PDF
Luận văn: Các tội xâm phạm sở hữu có tính chất chiếm đoạt, HOT
PDF
HOÀN THIỆN PHÁP LUẬT VỀ BẢO VỆ THÔNG TIN CÁ NHÂN Ở VIỆT NAM HIỆN NAY.pdf
PDF
Luận văn: Vấn đề để giảm và tiến tới xoá bỏ hình phạt tử hình, HOT
DOCX
Luận văn Pháp Luật Về Bảo Hộ Quyền Tác Giả Trên Internet
PPTX
ORM을 활용할 경우의 설계, 개발 과정
PDF
QUÁ TRÌNH PHÂN ĐỊNH BIỂN GIỮA VIỆT NAM VÀ TRUNG QUỐC Ở VỊNH BẮC BỘ (1993 - 20...
PDF
Luận án: Hoạt động bảo hiểm tiền gửi theo pháp luật Việt Nam
DOC
Luận văn tội giết người theo pháp luật hình sự Việt Nam từ thực tiễn tỉnh nam...
PDF
Tướng pháp NGÔ HÙNG DIỄN - Tác phẩm kinh điển
Đề tài: Vi phạm điều kiện kết hôn của đồng bào dân tộc thiểu số
BÀI MẪU luận văn giải quyết tranh chấp cho thuê tài sản, HOT
Luận văn: Các căn cứ quyết định hình phạt theo pháp luật hình sự
Cơ sở lý luận về công ty trách nhiệm hữu hạn một thành viên.docx
The Full Stack Java Developer - Josh Long
Toi pham hoc duong dai, Duong Tuyet Mien.pdf
Bài Tiểu Luận Môi Trường Đề Tài Sinh Thái Biển, 9 Điểm.docx
Luận văn: Tội trộm cắp tài sản theo pháp luật hình sự Việt Nam
Thu thập, sử dụng chứng cứ trong điều tra vụ án giết người, HAY
Luận văn: Pháp luật về sở hữu nhà ở của người Việt Nam định cư ở nước ngoài v...
Luận văn: Các tội xâm phạm sở hữu có tính chất chiếm đoạt, HOT
HOÀN THIỆN PHÁP LUẬT VỀ BẢO VỆ THÔNG TIN CÁ NHÂN Ở VIỆT NAM HIỆN NAY.pdf
Luận văn: Vấn đề để giảm và tiến tới xoá bỏ hình phạt tử hình, HOT
Luận văn Pháp Luật Về Bảo Hộ Quyền Tác Giả Trên Internet
ORM을 활용할 경우의 설계, 개발 과정
QUÁ TRÌNH PHÂN ĐỊNH BIỂN GIỮA VIỆT NAM VÀ TRUNG QUỐC Ở VỊNH BẮC BỘ (1993 - 20...
Luận án: Hoạt động bảo hiểm tiền gửi theo pháp luật Việt Nam
Luận văn tội giết người theo pháp luật hình sự Việt Nam từ thực tiễn tỉnh nam...
Tướng pháp NGÔ HÙNG DIỄN - Tác phẩm kinh điển
Ad

Similar to SpringDataJPA - 스프링 캠프 (20)

PDF
Ksug2015 jpa5 스프링과jpa
PPTX
MyBatis에서 JPA로
PDF
[2018] MyBatis에서 JPA로
PDF
[162] jpa와 모던 자바 데이터 저장 기술
PPTX
Spring data jpa
PPTX
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
PDF
Jpa 잘 (하는 척) 하기
PPSX
spring data jpa 간단한 튜토리얼
PDF
Ksug2015 - JPA1, JPA 소개
PPTX
Java JPA
PDF
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
Ksug2015 jpa4 객체지향쿼리
PDF
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
PDF
Ksug2015 - JPA2, JPA 기초와매핑
PPTX
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
PDF
Jpa more
PDF
Hibernate start (하이버네이트 시작하기)
PDF
overview of spring4
PPTX
JPA 프로그래밍 (1)
PPTX
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
Ksug2015 jpa5 스프링과jpa
MyBatis에서 JPA로
[2018] MyBatis에서 JPA로
[162] jpa와 모던 자바 데이터 저장 기술
Spring data jpa
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
Jpa 잘 (하는 척) 하기
spring data jpa 간단한 튜토리얼
Ksug2015 - JPA1, JPA 소개
Java JPA
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
Ksug2015 jpa4 객체지향쿼리
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
Ksug2015 - JPA2, JPA 기초와매핑
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Jpa more
Hibernate start (하이버네이트 시작하기)
overview of spring4
JPA 프로그래밍 (1)
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
Ad

SpringDataJPA - 스프링 캠프