레이블이 SpringHATEOAS인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SpringHATEOAS인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 4일 토요일

스프링부트학원,Spring Data REST를 이용한 스프링 REST API 실습소스및 동영상(Spring Data JPA, 스프링교육학원, JPA교육, 스프링오라클연동 RESTAPI)

 

스프링부트학원,Spring Data REST를 이용한 스프링 REST API 실습소스및 동영상(Spring Data JPA, 스프링교육학원, JPA교육, 스프링오라클연동 RESTAPI)



springbootrest.zip

0.06MB

이미지 썸네일 삭제
(동영상)스프링부트(Spring Boot) Spring Data REST를 이용한REST API 실습(JPA, 오라클)

스프링부트(Spring Boot) Spring Data REST를 이용한REST API 실습(JPA, 오라클) n RESTful 웹 서비스란 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다. n Spring 또는 Spring Boot 기반으로 RESTful 웹 서…

ojc.asia




n RESTful 웹 서비스란 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다.

n Spring 또는 Spring Boot 기반으로 RESTful 웹 서비스를 만들려면 @RestController로 스프링 컨트롤러를 만들어야 하지만 본 실습에서는 Spring Data REST를 이용하여 별도의 컨트롤러 작성하지 않고 Entity인 Emp.java와 Repository 인터페이스 EmpRepository.java 두개의 파일만 만들어 RestController 없이 REST API를 테스트 합니다.

n pom.xml의 spring-boot-starter-data-rest로 정의된 Spring Data REST는 도메인 모델(Emp.java)과 Repository(EmpRepository.java)를 분석해서 RESTful API를 제공해 줍니다.

n 또한 Spring Data REST는 Spring HATEOAS와 Spring Data JPA의 기능을 자동으로 결합합니다.

n Spring HATEOAS(Hypermedia As The Engine Of Application State)는 Hypermedia를 REST API의 상태 정보를 관리하기 위한 엔진으로 활용하는 것을 말합니다.

n Spring HATEOAS는 서버에서 클라이언트로 응답 리소스를 보낼 때 link로 사용 가능한 URL을 같이 전달하고 클라이언트는 제공된 link 정보를 바탕으로 리소스에 접근할 수 있도록 하는 것 입니다. 즉 클라이언트가 서버에 REST 요청시 서버는 응답에 각각의 자원들을 참조할 수 있는 URI를 link에 포함시켜 반환 합니다.



[실습]

n Springbootrest 라는 이름으로 Spring Starter Project를 생성하자.

n File >> new >> Spring Stater Project

n package : com.exemple.demo


n 다음 화면에서 Developer Tools의 Lombok, SQL의 Spring Data Jpa, oracle driver, WEB의 Rest Repositories 선택


n 1. pom.xml

ü spring-boot-starter-parent : 종속성 관리를위한 부모 POM.

ü spring-boot-starter-data-jpa : Spring Data JPA 사용을 위한 설정

ü spring-boot-starter-rest : Spring Data REST 사용을 위한 설정

ü spring-boot-maven-plugin : 응용 프로그램의 실행 가능한 JAR을 만들기 위한 Plug-In


<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.3.3.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>com.example</groupId>

<artifactId>springbootrest</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>springbootrest</name>

<description>Demo project for Spring Boot</description>


<properties>

<java.version>1.8</java.version>

</properties>


<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-rest</artifactId>

</dependency>

<dependency>

<groupId>com.oracle.database.jdbc</groupId>

<artifactId>ojdbc8</artifactId>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<optional>true</optional>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

<exclusions>

<exclusion>

<groupId>org.junit.vintage</groupId>

<artifactId>junit-vintage-engine</artifactId>

</exclusion>

</exclusions>

</dependency>

</dependencies>


<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>


</project>



n 2. src/main/resources/application.properties


# DataSource(오라클12.2) 설정

spring.datasource.driver-class_name=oracle.jdbc.driver.OracleDriver

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl

spring.datasource.username=scott

spring.datasource.password=tiger


spring.datasource.tomcat.max-wait=20000

spring.datasource.tomcat.max-active=50

spring.datasource.tomcat.max-idle=20

spring.datasource.tomcat.min-idle=15


# 응용프로그램 시작시 마다 DROP 후 테이블 생성

spring.jpa.hibernate.ddl-auto=update


spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

spring.jpa.properties.hibernate.id.new_generator_mappings=false

spring.jpa.properties.hibernate.format_sql=true


logging.level.org.hibernate.SQL=DEBUG

logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE


n 2. Model/Entity 클래스(Emp.java)


package com.example.demo.model;


import java.io.Serializable;


import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;


import lombok.Data;


@Entity

@Table(name = "restemp")

@Data

public class Emp implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private long empno;


private String ename;

private Integer sal;


}



n 4. Repository 클래스(EmpRepository.java)


package com.example.demo.repository;


import java.util.List;


import org.springframework.data.repository.PagingAndSortingRepository;

import org.springframework.data.repository.query.Param;

import org.springframework.data.rest.core.annotation.RepositoryRestResource;


import com.example.demo.model.Emp;


/**

* PagingAndSortingRepository는 페이징과 정렬을 위한 기능을 제공하는데

* CrudRepository를 상속받았으며 CrudRepository는

* Repository 인터페이스를 상속 받았는데

* 엔티티(테이블)를 다룰 수 있는 다양한 CRUD 메소드들이 구현되어 있습니다.

*

* Spring Data REST는 PagingAndSortingRepository

* 인터페이스의 구현을 자동으로 생성해 줍니다.

* 즉 기본적인 CRUD는 제공되므로 구현하지 않아도 됩니다.

* (예를들면 findAll, findById, save, deleteById, count 등등)

*

* 아래의 findByEname 메소드 역시 개발자가 구현을 하지 않았으며 JPA에서

* 메소드 이름을 가지고 내부적으로 자동으로 SELECT 쿼리를 만들어 줍니다.

*

@RepositoryRestResource 어노테이션은

* Spring MVC가 “/emp” 형태로 RESTful End-Point를 생성하도록 지시.

*/

@RepositoryRestResource(collectionResourceRel = "emp", path = "emp")

public interface EmpRepository

extends PagingAndSortingRepository<Emp, Long> {

List<Emp> findByEname(@Param("ename") String ename);

}


n [실행 화면, Google Advanced Rest client]


Ename:“가길동”, sal : “1000” 사원 추가

(POST localhost:8080/emp/)


사진 삭제

사진 설명을 입력하세요.





두명의 사원을 더 추가하자.


Ename:“나길동”, sal : “2000” 사원 추가

(POST localhost:8080/emp/)


Ename:“다길동”, sal : “3000” 사원 추가

(POST localhost:8080/emp/)







전체 사원조회(GET, localhost:8080/emp)


아래 _links는 HATEOAS를 구현하기 위해 스프링 부트에서 생성한 JSON name입니다. 그리고 그 뒤의 self는 자기 참조를 뜻하는 것을 JSON을 통해서 나타낸 것입니다.







30번 사원 조회(localhost:8080/emp/30)








Ename이 “나길동”인 사원 조회

(localhost:8080/emp/search/findByEname?ename=나길동)






30번 가길동 사원의 데이터를 ename:이종철, sal:9999로 수정

PUT, localhost:8080/emp/30


사진 삭제

사진 설명을 입력하세요.





30번 사원 삭제(DELETE, localhost:8080/emp/30)



#스프링REST, #스프링부트, #스프링강좌, #SpringDataRest, #Spring동영상, #스프링부트동영상, #Spring, #스프링프레임워크, #스프링동영상, #스프링강의, #SpringHATEOAS, 스프링REST, 스프링부트, 스프링강좌, SpringDataRest, Spring동영상, 스프링부트동영상, Spring, 스프링프레임워크, 스프링동영상, 스프링강의, SpringHATEOAS




(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...