어제에 이어서 구현하는 예제를 만들어서 실습!
개발환경은
Springboot 3.0.9 / java 17 / mysql / intellij community 버전
1. 프로젝트 생성 및 디렉토리 구조
프로젝트는 Springboot initializr (https://start.spring.io/) 를 통해서 생성하였다.
기본적인 Spring web, 롬복, mysql 등 추가해서 생성 -> 아래 gradle.build 예시 확인
디렉토리구조
- common : 공통적으로 사용할 dto, exception처리, 후에 공통유틸 등 관하는 디렉토리
-domain : entity와 repository 관리
-각각서비스디렉토리 : 서비스명 하위에 controller, service, dao 두어 서비스별로 관리
-->대략적인 구조는 이렇게 가져가려 한다.
2. 설정
application.yml
#local
spring:
profiles:
activate:
on-profile: local
# database
datasource:
url: jdbc:mysql://localhost:3306/스키마명?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Seoul
username: 아이디
password: 비밀번호
driver-class-name: com.mysql.cj.jdbc.Driver
# jpa
jpa:
show-sql: true
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
format_sql: true
#encoding
server:
servlet:
encoding:
charset: UTF-8
1. LOCAL / DEV / QA / MASTER 로 분리하기 위해 profile 설정을 했다.
2. DB는 mysql이며 시간위치설정, 인코딩설정, ssl설정 끔 등 처리함
3. JPA 설정 show-sql = true -> 로그에 sql문 보여줌 / ddl-auto -> DDL문을 자동으로 작성해주지만 안전을 위해 none으로 설정(*후에 설정 관련한 포스팅을 해야겠다)
build.gradle
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.9'
id 'io.spring.dependency-management' version '1.1.2'
}
group = '기본패키지경로'
version = '0.0.1'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
//Spring
implementation 'org.springframework.boot:spring-boot-starter-web'
//swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
//jpa
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.hibernate:hibernate-validator:7.0.5.Final'
//mysql
runtimeOnly 'com.mysql:mysql-connector-j:8.0.32'
//lombok
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
기본 설정에서 dependencies에 사용할 친구들을 추가했다.
스프링부트3버전에서는 swagger config 설정없이 추가만하면 바로 swagger-ui로 접근 가능하다.
(*이전 포스팅 참고)
3.USER 저장 구현
-Entity.java
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "TBL_USER_M", schema = "testproj", catalog = "")
public class UserEntity {
@Id
@Column(name="USER_ID")
private String userId;
@Column(name="USER_NM")
private String userNm;
@Column(name="USER_PW")
private String userPw;
@Column(name="USER_TEL")
private String userTel;
@Column(name="POST")
private String post;
@Column(name="USER_ADDR1")
private String userAddr1;
@Column(name="USER_ADDR2")
private String userAddr2;
}
-UserRepository.java
@Repository
public interface UserRepository extends JpaRepository<UserEntity, String> {
}
-UserController.java
@RequiredArgsConstructor
@RestController
@RequestMapping(value="/api")
public class UserController {
private final UserService userService;
@PostMapping(value = "/user")
public ResponseEntity<APIResponse> saveUser(@RequestBody RequestUserSave requestUserSave){
return ResponseEntity.status(HttpStatus.OK).body(APIResponse.of(userService.saveUser(requestUserSave)));
}
}
-UserService.java
@RequiredArgsConstructor
@Service
public class UserService {
private final UserRepository userRepository;
@Transactional
public boolean saveUser(RequestUserSave requestUserSave) {
userRepository.save(requestUserSave.toEntity());
return true;
}
}
-RequestUserSave : 저장 요청 데이터를 담을 DTO를 만들어서 파라미터로 받았다.
-반환값은 업무중 구현해 놓은 리턴값들 정리한 공통부분 활용(리턴메세지)
정말 특별한거 없이 슉~ 하면 저장이 된다.
파라미터를 받아서 -> 서비스에서 엔터티로 변환 -> save() 메소드로 엔터티를 보내면 저장 완료!
<Swagger 화면 및 결과 캡처>
다음 포스팅은 JPQL / Querydsl 을 보고 비교해보자!
*혹시 내용에 수정이 필요한 부분이 있으면 댓글로 남겨주세요 : )
'JAVA' 카테고리의 다른 글
땅꼬마의 Querydsl 사용해보기! (0) | 2023.08.05 |
---|---|
땅꼬마의 JPQL 사용하기! (0) | 2023.07.31 |
땅꼬마의 JPA 개념정리!! (0) | 2023.07.24 |
땅꼬마의 Springboot 3.X 버전에 Swagger 연동하기 (0) | 2023.04.24 |
땅꼬마의 While문 만들기! (0) | 2022.10.11 |