SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
소스코드, 강의자료 및 동영상 다시 보기는 오라클
자바커뮤니티(http://ojc.asia)에서 가능합니다.
Spring Data JPA 간단 예제, 페이징 실습
 Spring Boot, WEB MVC, Spring Data JPA, Maria DB를 이용하여 간단히 예제를 만들어 보자.
프로젝트 생성
마리아DB 설치는 아래 URL 참조
http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=524
STS에서 File -> New Project -> Spring Starter Project
Name : springjpaexam
Type : MAVEN
Package : jpa
다음화면에서 SQL -> JPA, MySQL, WEB -> Web 선택
src/main/resources/application.properties
spring.datasource.platform=mysql
spring.datasource.sql-script-encoding=UTF-8
spring.datasource.url=jdbc:mysql://localhost/jpa_emp?createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
#엔티티 클래스를 기반으로 테이블을 자동갱신/생성 하도록
spring.jpa.hibernate.ddl-auto=update
logging.level.jpa=DEBUG
도메인 클래스(Emp.java) – 테이블구조와 동일하다.
package jpa.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Emp {
@Id
@GeneratedValue
private Integer empno;
private String ename;
public Emp() {}
public Emp(String ename) { this.ename = ename; }
public Integer getEmpno() { return empno; }
public void setEmpno(Integer empno) { this.empno = empno; }
public String getEname() { return ename; }
public void setEname(String ename) { this.ename = ename; }
}
레포지토리 클래스(EmpRepository.java)
package jpa.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import jpa.domain.Emp;
//JpaRepository를 상속받으며 매개변수로 도메인클래스와 키타입을 기술한다.
public interface EmpRepository extends JpaRepository<Emp, Integer> {
}
서비스 인터페이스 및 구현클래스(EmpService.java, EmpServiceImpl.java)
package jpa.service;
import java.util.List;
import jpa.domain.Emp;
public interface EmpService {
Emp save(Emp e);
void delete(Integer empno);
Emp getEmp(Integer empno);
List<Emp> getAllEmp();
}
package jpa.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import jpa.domain.Emp;
import jpa.repository.EmpRepository;
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
EmpRepository empRepository;
public Emp save(Emp e) {
return empRepository.save(e);
}
public void delete(Integer empno) {
empRepository.delete(empno);
}
public Emp getEmp(Integer empno) {
return empRepository.findOne(empno);
}
public List<Emp> getAllEmp() {
return empRepository.findAll();
}
}
컨트롤러 클래스(EmpController.java)
package jpa.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import jpa.domain.Emp;
import jpa.service.EmpService;
@RestController
@RequestMapping("/emp")
public class EmpController {
@Autowired
EmpService empService;
// http://localhost:8080/emp/get/2
@RequestMapping(value = "/get/{empno}", method = RequestMethod.GET)
public Emp get(@PathVariable Integer empno) {
return empService.getEmp(empno);
}
// http://localhost:8080/emp/save.do?ename=주길동
@RequestMapping(value = "/save", method = RequestMethod.GET)
public Emp add(@RequestParam String ename) {
return empService.save(new Emp(ename));
}
// http://localhost:8080/emp/save/차길동
@RequestMapping(value = "/save/{ename}", method = RequestMethod.GET)
public Emp add2(@PathVariable String ename) {
return empService.save(new Emp(ename));
}
// http://localhost:8080/emp/delete/2
@RequestMapping(value = "/delete/{empno}", method = RequestMethod.GET)
public void delete(@PathVariable Integer empno) {
empService.delete(empno);
}
// http://localhost:8080/emp/getall
@RequestMapping(value = "/getall", method = RequestMethod.GET)
public List<Emp> getAll() {
return empService.getAllEmp();
}
}
스프링 부트 메인 클래스(SpringJpaExamApplication.java)
package jpa;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import jpa.domain.Emp;
import jpa.service.EmpService;
@SpringBootApplication
public class SpringjpaexamApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(SpringjpaexamApplication.class, args);
}
@Autowired
EmpService empService;
// 초기 데이터 생성
public void run(String...args) {
empService.save(new Emp("가길동"));
empService.save(new Emp("하길동"));
empService.save(new Emp("바길동"));
empService.save(new Emp("사길동"));
empService.save(new Emp("라길동"));
empService.save(new Emp("나길동"));
empService.save(new Emp("마길동"));
empService.save(new Emp("정길동"));
empService.save(new Emp("카길동"));
empService.save(new Emp("피길동"));
}
}
[예제 실습]
http://localhost:8080/emp/get/2
http://localhost:8080/emp/save.do?ename=주길동
http://localhost:8080/emp/save/차길동
http://localhost:8080/emp/delete/2
http://localhost:8080/emp/getall
Spring Data JPA 페이징(Pageable, PageRequest)
 Spring Data JPA에서 페이징은 PagingAndSortingRepository 인터페이스(CrudRepository를 상
속)의 findAll 메소드를 사용하면 간단히 사용할 수 있다. findAll을 호출할 때 인자로
Pageable 인퍼테이스 또는 Pageable 인터페이스 구현체인 PageRequest를 넣어 준다.
public interface PagingAndSortingRepository<T, ID extends Serializable>
extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
 PagingAndSortingRepository 인터페이스의 findAll 메소드는 2가지 형태의 파라미터를 지원
한다.
org.springframework.data.domain.Sort : 정렬을 지원
org.springframework.data.domain.Pageable : 페이징을 지원하며 파라미터에 Pageable을 사용하면
리턴형으로 List나 org.springframework.data.domain.Page 사용 한다.
 다음과 같이 Controller를 만들면 된다.
public interface EmpRepository<Emp, Integer> extends JpaRepository { }
[컨트롤러 등에서]
[Pageable 예문]
//Pageable을 사용하면 간단하다. 이 컨트롤러 메소드를 호출하는 쪽에서 page, size, sort등
을 파라미터로 던지기만 하면 된다.
//Pageable 인터페이스를 위한 Request Parameter는 다음과 같다.
//page : 검색을 원하는 페이지 번호(0부터 시작)
//size : 한페이지 개수
//sort : 정렬방식(sort=ename, asc&sort=sal, desc)
//localhost:8080/emp/list?page=0&size=3&sort=ename,desc
//////////////////////////////////////////////////////////////////
//첫번째 Page, 한페이지 3개씩, 사원이름 내림차순 정렬
//////////////////////////////////////////////////////////////////
@Autowired
EmpService empService;
@RequestMapping(“/list”)
Public Page<Emp> getall(Model model, Pageable pageable) {
model.addAttribute(“list”, empService.findAll(pageable));
return “list”;
}
[PageRequest 예문]
// PageRequest를 사용한다면 파라미터를 넘겨서 다음과 같이 처리하면 된다.
//localhost:8080/list/1  첫페이지
@RequestMapping(“/list”)
public Page<Emp> getall(Model model, @PathVariable Integer pNo,
@PathVariable Integer size) {
// pNo로 넘어오는 페이지를 보이는데 한페이지 size수만큼 사원이름 내림차순
PageRequest request =
new PageRequest(pNo - 1, size, Sort.Direction.DESC, "ename");
return empService.findAll(request);
}
[이미지를 클릭하시면 과정 상세로 이동 합니다.]

Contenu connexe

Plus de 탑크리에듀(구로디지털단지역3번출구 2분거리)

[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Plus de 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
 
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
 

(탑크리에듀, Spring Boot, Spring Data JPA MVC 예제 및 페이징,페이지나누기 STS 실습)_스프링/스프링부트/스프링JPA/Querydsl실무학원추천교육

  • 1. 소스코드, 강의자료 및 동영상 다시 보기는 오라클 자바커뮤니티(http://ojc.asia)에서 가능합니다.
  • 2. Spring Data JPA 간단 예제, 페이징 실습  Spring Boot, WEB MVC, Spring Data JPA, Maria DB를 이용하여 간단히 예제를 만들어 보자. 프로젝트 생성 마리아DB 설치는 아래 URL 참조 http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=524 STS에서 File -> New Project -> Spring Starter Project Name : springjpaexam Type : MAVEN Package : jpa 다음화면에서 SQL -> JPA, MySQL, WEB -> Web 선택 src/main/resources/application.properties spring.datasource.platform=mysql spring.datasource.sql-script-encoding=UTF-8 spring.datasource.url=jdbc:mysql://localhost/jpa_emp?createDatabaseIfNotExist=true spring.datasource.username=root spring.datasource.password=1111 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.show-sql=true #엔티티 클래스를 기반으로 테이블을 자동갱신/생성 하도록 spring.jpa.hibernate.ddl-auto=update logging.level.jpa=DEBUG 도메인 클래스(Emp.java) – 테이블구조와 동일하다. package jpa.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Emp { @Id
  • 3. @GeneratedValue private Integer empno; private String ename; public Emp() {} public Emp(String ename) { this.ename = ename; } public Integer getEmpno() { return empno; } public void setEmpno(Integer empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } } 레포지토리 클래스(EmpRepository.java) package jpa.repository; import org.springframework.data.jpa.repository.JpaRepository; import jpa.domain.Emp; //JpaRepository를 상속받으며 매개변수로 도메인클래스와 키타입을 기술한다. public interface EmpRepository extends JpaRepository<Emp, Integer> { } 서비스 인터페이스 및 구현클래스(EmpService.java, EmpServiceImpl.java) package jpa.service; import java.util.List; import jpa.domain.Emp; public interface EmpService { Emp save(Emp e); void delete(Integer empno); Emp getEmp(Integer empno); List<Emp> getAllEmp(); } package jpa.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import jpa.domain.Emp;
  • 4. import jpa.repository.EmpRepository; @Service public class EmpServiceImpl implements EmpService { @Autowired EmpRepository empRepository; public Emp save(Emp e) { return empRepository.save(e); } public void delete(Integer empno) { empRepository.delete(empno); } public Emp getEmp(Integer empno) { return empRepository.findOne(empno); } public List<Emp> getAllEmp() { return empRepository.findAll(); } } 컨트롤러 클래스(EmpController.java) package jpa.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import jpa.domain.Emp; import jpa.service.EmpService; @RestController @RequestMapping("/emp") public class EmpController {
  • 5. @Autowired EmpService empService; // http://localhost:8080/emp/get/2 @RequestMapping(value = "/get/{empno}", method = RequestMethod.GET) public Emp get(@PathVariable Integer empno) { return empService.getEmp(empno); } // http://localhost:8080/emp/save.do?ename=주길동 @RequestMapping(value = "/save", method = RequestMethod.GET) public Emp add(@RequestParam String ename) { return empService.save(new Emp(ename)); } // http://localhost:8080/emp/save/차길동 @RequestMapping(value = "/save/{ename}", method = RequestMethod.GET) public Emp add2(@PathVariable String ename) { return empService.save(new Emp(ename)); } // http://localhost:8080/emp/delete/2 @RequestMapping(value = "/delete/{empno}", method = RequestMethod.GET) public void delete(@PathVariable Integer empno) { empService.delete(empno); } // http://localhost:8080/emp/getall @RequestMapping(value = "/getall", method = RequestMethod.GET) public List<Emp> getAll() { return empService.getAllEmp(); } } 스프링 부트 메인 클래스(SpringJpaExamApplication.java) package jpa; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication;
  • 6. import org.springframework.boot.autoconfigure.SpringBootApplication; import jpa.domain.Emp; import jpa.service.EmpService; @SpringBootApplication public class SpringjpaexamApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(SpringjpaexamApplication.class, args); } @Autowired EmpService empService; // 초기 데이터 생성 public void run(String...args) { empService.save(new Emp("가길동")); empService.save(new Emp("하길동")); empService.save(new Emp("바길동")); empService.save(new Emp("사길동")); empService.save(new Emp("라길동")); empService.save(new Emp("나길동")); empService.save(new Emp("마길동")); empService.save(new Emp("정길동")); empService.save(new Emp("카길동")); empService.save(new Emp("피길동")); } } [예제 실습] http://localhost:8080/emp/get/2 http://localhost:8080/emp/save.do?ename=주길동 http://localhost:8080/emp/save/차길동 http://localhost:8080/emp/delete/2 http://localhost:8080/emp/getall
  • 7. Spring Data JPA 페이징(Pageable, PageRequest)  Spring Data JPA에서 페이징은 PagingAndSortingRepository 인터페이스(CrudRepository를 상 속)의 findAll 메소드를 사용하면 간단히 사용할 수 있다. findAll을 호출할 때 인자로 Pageable 인퍼테이스 또는 Pageable 인터페이스 구현체인 PageRequest를 넣어 준다. public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); }  PagingAndSortingRepository 인터페이스의 findAll 메소드는 2가지 형태의 파라미터를 지원 한다. org.springframework.data.domain.Sort : 정렬을 지원 org.springframework.data.domain.Pageable : 페이징을 지원하며 파라미터에 Pageable을 사용하면 리턴형으로 List나 org.springframework.data.domain.Page 사용 한다.  다음과 같이 Controller를 만들면 된다. public interface EmpRepository<Emp, Integer> extends JpaRepository { } [컨트롤러 등에서] [Pageable 예문] //Pageable을 사용하면 간단하다. 이 컨트롤러 메소드를 호출하는 쪽에서 page, size, sort등 을 파라미터로 던지기만 하면 된다. //Pageable 인터페이스를 위한 Request Parameter는 다음과 같다. //page : 검색을 원하는 페이지 번호(0부터 시작) //size : 한페이지 개수 //sort : 정렬방식(sort=ename, asc&sort=sal, desc) //localhost:8080/emp/list?page=0&size=3&sort=ename,desc ////////////////////////////////////////////////////////////////// //첫번째 Page, 한페이지 3개씩, 사원이름 내림차순 정렬 ////////////////////////////////////////////////////////////////// @Autowired
  • 8. EmpService empService; @RequestMapping(“/list”) Public Page<Emp> getall(Model model, Pageable pageable) { model.addAttribute(“list”, empService.findAll(pageable)); return “list”; } [PageRequest 예문] // PageRequest를 사용한다면 파라미터를 넘겨서 다음과 같이 처리하면 된다. //localhost:8080/list/1  첫페이지 @RequestMapping(“/list”) public Page<Emp> getall(Model model, @PathVariable Integer pNo, @PathVariable Integer size) { // pNo로 넘어오는 페이지를 보이는데 한페이지 size수만큼 사원이름 내림차순 PageRequest request = new PageRequest(pNo - 1, size, Sort.Direction.DESC, "ename"); return empService.findAll(request); } [이미지를 클릭하시면 과정 상세로 이동 합니다.]