JPA_SP 수정 및 Test용 Http 파일 추가 #3 #4

Merged
HyeonJongKim merged 1 commits from feature/#3 into main 2024-05-08 14:55:01 +09:00
22 changed files with 127 additions and 99 deletions

View File

@ -26,9 +26,3 @@ docker compose up -d # detach mode
docker compose -v down # 종료 (-v 옵션 줄 경우 volume 삭제) docker compose -v down # 종료 (-v 옵션 줄 경우 volume 삭제)
``` ```
2. 프로젝트 실행 2. 프로젝트 실행
## [JPA_SP CRUD]
### JPA를 이용하여 SP 호출을 구현한 PoC
#### 주의 사항
- resources/procedure.sql 을 별도로 실행하여 SP DB에 저장해야 정상작동

View File

@ -8,8 +8,7 @@
<processorPath useClasspath="false"> <processorPath useClasspath="false">
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.32/17d46b3e205515e1e8efd3ee4d57ce8018914163/lombok-1.18.32.jar" /> <entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.32/17d46b3e205515e1e8efd3ee4d57ce8018914163/lombok-1.18.32.jar" />
</processorPath> </processorPath>
<module name="admin.test" /> <module name="jpa_sp_poc.main" />
<module name="admin.main" />
</profile> </profile>
</annotationProcessing> </annotationProcessing>
</component> </component>

12
poc/.idea/dataSources.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@localhost" uuid="6695722a-641b-4a9a-9b06-50f52a22ce66">
<driver-ref>mariadb</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mariadb://localhost:3307</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

View File

@ -12,6 +12,15 @@
</set> </set>
</option> </option>
</GradleProjectSettings> </GradleProjectSettings>
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$/jpa_sp_poc" />
<option name="gradleJvm" value="corretto-19" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$/jpa_sp_poc" />
</set>
</option>
</GradleProjectSettings>
</option> </option>
</component> </component>
</project> </project>

View File

@ -3,6 +3,7 @@
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration"> <component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$/admin" /> <file type="web" url="file://$PROJECT_DIR$/admin" />
<file type="web" url="file://$PROJECT_DIR$/jpa_sp_pocs" />
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />

View File

@ -3,6 +3,7 @@
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/jpa_sp_poc/jpa_sp_poc.iml" filepath="$PROJECT_DIR$/jpa_sp_poc/jpa_sp_poc.iml" /> <module fileurl="file://$PROJECT_DIR$/jpa_sp_poc/jpa_sp_poc.iml" filepath="$PROJECT_DIR$/jpa_sp_poc/jpa_sp_poc.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/jpa_sp_poc.main.iml" filepath="$PROJECT_DIR$/.idea/modules/jpa_sp_poc.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/poc.iml" filepath="$PROJECT_DIR$/.idea/poc.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/poc.iml" filepath="$PROJECT_DIR$/.idea/poc.iml" />
</modules> </modules>
</component> </component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../../jpa_sp_pocs/build/generated/sources/annotationProcessor/java/main">
<sourceFolder url="file://$MODULE_DIR$/../../jpa_sp_pocs/build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
</content>
</component>
</module>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/jpa_sp_pocs/src/main/resources/procedure.sql" dialect="GenericSQL" />
</component>
</project>

View File

@ -0,0 +1,24 @@
### Create Member
POST http://localhost:8080/create-member
Content-Type: application/json
{
"name": "Hong Gil Dong",
"email": "bpGroup@bpsoft.co.kr",
"password": "1234"
}
### Select All Members
GET http://localhost:8080/all-members
### Update Member
POST http://localhost:8080/update-member
Content-Type: application/json
{
"id": 1,
"name": "Jang Gil San"
}
### Delete Member
POST http://localhost:8080/delete-member?id=1

View File

@ -4,7 +4,7 @@ plugins {
id 'io.spring.dependency-management' version '1.1.4' id 'io.spring.dependency-management' version '1.1.4'
} }
group = 'JPA_SP' group = 'com.bpgroup.poc'
version = '0.0.1-SNAPSHOT' version = '0.0.1-SNAPSHOT'
java { java {
@ -22,15 +22,23 @@ repositories {
} }
dependencies { dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'
developmentOnly 'org.springframework.boot:spring-boot-devtools' developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'org.springframework.boot:spring-boot-starter-validation'
//jpa
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// db // db
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
} }
tasks.named('test') { tasks.named('test') {

View File

@ -1 +1 @@
rootProject.name = 'JPA_SP' rootProject.name = 'jpa_sp_poc'

View File

@ -1,4 +1,4 @@
package jpa_sp_poc.jpa_sp; package com.bpgorup.poc.jpa_sp;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Getter; import lombok.Getter;

View File

@ -1,11 +1,9 @@
package jpa_sp_poc.jpa_sp; package com.bpgorup.poc.jpa_sp;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication @SpringBootApplication
@EnableJpaAuditing
public class JpaSpApplication { public class JpaSpApplication {
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -1,9 +1,9 @@
package jpa_sp_poc.jpa_sp.Controller; package com.bpgorup.poc.jpa_sp.controller;
import jpa_sp_poc.jpa_sp.ApiResponse; import com.bpgorup.poc.jpa_sp.ApiResponse;
import jpa_sp_poc.jpa_sp.Request.MemberRequest; import com.bpgorup.poc.jpa_sp.request.MemberRequest;
import jpa_sp_poc.jpa_sp.Service.MemberService; import com.bpgorup.poc.jpa_sp.request.UpdateMemberRequest;
import jpa_sp_poc.jpa_sp.Request.UpdateMemberRequest; import com.bpgorup.poc.jpa_sp.service.MemberService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -13,15 +13,6 @@ public class MainController {
private final MemberService memberService; private final MemberService memberService;
/*
* CREATE PROCEDURE GetAllMember(
* )
* BEGIN
* SELECT *
* FROM Member;
* END
*/
@GetMapping("/all-members") @GetMapping("/all-members")
public ApiResponse allMembers() { public ApiResponse allMembers() {
try { try {
@ -31,18 +22,6 @@ public class MainController {
} }
} }
/*
* CREATE PROCEDURE CreateMember(
* IN p_name VARCHAR(50),
* IN p_email VARCHAR(50),
* IN p_password VARCHAR(50)
* )
* BEGIN
* INSERT INTO Member (Name, Email, Password)
* VALUES (p_name, p_email, p_password);
* END
*/
@PostMapping("/create-member") @PostMapping("/create-member")
public ApiResponse createMember(@RequestBody MemberRequest request) { public ApiResponse createMember(@RequestBody MemberRequest request) {
try { try {
@ -52,18 +31,6 @@ public class MainController {
} }
} }
/*
CREATE PROCEDURE UpdateMember(
IN p_id BIGINT,
IN p_name VARCHAR(50)
)
BEGIN
UPDATE Member
SET name = p_name
WHERE id = id;
END
*/
@PostMapping("/update-member") @PostMapping("/update-member")
public ApiResponse updateMember(@RequestBody UpdateMemberRequest request) { public ApiResponse updateMember(@RequestBody UpdateMemberRequest request) {
try { try {
@ -73,18 +40,6 @@ public class MainController {
} }
} }
/*
* CREATE PROCEDURE DeleteMember(
* IN p_id LONG
* )
* BEGIN
* DELETE
* FROM Member
* WHERE id = p_id ;
* END
*
*/
@PostMapping("/delete-member") @PostMapping("/delete-member")
public ApiResponse deleteMember(@RequestParam Long id) { public ApiResponse deleteMember(@RequestParam Long id) {
try { try {

View File

@ -1,24 +1,24 @@
package jpa_sp_poc.jpa_sp.Entity; package com.bpgorup.poc.jpa_sp.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter @Getter
@NoArgsConstructor
@Entity @Entity
@Table(name = "member") @Table(name = "member")
public class MemberEntity { public class MemberEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@Column(name="name", nullable = false)
private String name; private String name;
@Column(name="email", nullable = false)
private String email; private String email;
@Column(name="password", nullable = false)
private String password; private String password;
} }

View File

@ -1,6 +1,6 @@
package jpa_sp_poc.jpa_sp.Repository; package com.bpgorup.poc.jpa_sp.repository;
import jpa_sp_poc.jpa_sp.Entity.MemberEntity; import com.bpgorup.poc.jpa_sp.entity.MemberEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.query.Procedure; import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@ -0,0 +1,19 @@
package com.bpgorup.poc.jpa_sp.request;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
public class MemberRequest {
@NotBlank
private String name;
@NotBlank
private String email;
@NotBlank
private String password;
}

View File

@ -0,0 +1,16 @@
package com.bpgorup.poc.jpa_sp.request;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
public class UpdateMemberRequest {
@NotBlank
private Long id;
@NotBlank
private String name;
}

View File

@ -1,7 +1,7 @@
package jpa_sp_poc.jpa_sp.Service; package com.bpgorup.poc.jpa_sp.service;
import jpa_sp_poc.jpa_sp.ApiResponse; import com.bpgorup.poc.jpa_sp.ApiResponse;
import jpa_sp_poc.jpa_sp.Repository.MemberRepository; import com.bpgorup.poc.jpa_sp.repository.MemberRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -1,11 +0,0 @@
package jpa_sp_poc.jpa_sp.Request;
import lombok.Getter;
@Getter
public class MemberRequest {
private String name;
private String email;
private String password;
}

View File

@ -1,10 +0,0 @@
package jpa_sp_poc.jpa_sp.Request;
import lombok.Getter;
@Getter
public class UpdateMemberRequest {
private Long id;
private String name;
}

View File

@ -1 +0,0 @@
spring.application.name=jpa_sp_poc