Spring Boot + MariaDB + JPA 간단 예시

AMUD·2022년 7월 28일
2
post-thumbnail

이전 게시물과 이어지니 참고 바랍니당😏 본 게시물은 개념에 대한 설명보다는 간단한 예시를 작성하여 무조건 실행을 시켜보는 목표를 가지고 작성하였습니다!

📚 Spring Web Layer

간단 예시 게시글인만큼 개념은 간단하게 설명하고자 한다. 아래 그림과 같이 레이어가 구분이 된다.

📁 디렉토리

간단 예제에 앞서 디렉토리를 먼저 아래와 같이 구성한다. 디렉토리는 위의 레이어 구분을 바탕으로 설계하였다.

📊 JPA 의존 라이브러리


우선 JPA 활용 예시이기 때문에 build.gradle 의존 라이브러리를 추가하고, 오른쪽 위에 뜨는 코끼리 모양을 눌러 갱신한다. (아래의 라이브러리들은 이전 게시물 참고)

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

🍎 간단 예시 프로그램 작성

Entity 생성

@Entity 어노테이션을 이용하여 DB에 본 클래스를 바탕으로 테이블이 생성되도록 한다.
\src\main\java\com\example\demo\entity\Test.java

package com.example.demo.entity;

import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import javax.persistence.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EnableJpaAuditing
@EntityListeners(AuditingEntityListener.class)
public class Test {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    private Integer testId;

    @Column(length = 100)
    private String testContents;

    @Builder
    public Test(Integer testId, String testContents) {
        this.testId = testId;
        this.testContents = testContents;
    }
}

Controller 생성

@RestController를 통해 요청에 응답한다.
\src\main\java\com\example\demo\controller\TestController.java

package com.example.demo.controller;


import com.example.demo.dto.TestDto;
import com.example.demo.servcie.TestService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/test")
public class TestController {
    private final TestService testService;

    @GetMapping("/test/{str}")
    public String test(@PathVariable String str) {
        TestDto res = testService.testServiceMethod(str);

        return "hello "+res.getTestStr() ;
    }
}

Service 생성

@Service를 비지니스 로직을 구현한다.
\src\main\java\com\example\demo\service\TestService.java

package com.example.demo.servcie;

import com.example.demo.dto.TestDto;
import com.example.demo.repository.TestRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Service
@Component
@RequiredArgsConstructor
public class TestService {
    private final TestRepository testRepository;

    public TestDto testServiceMethod(String str) {
        TestDto testDto = new TestDto(str);

        return testDto;
    }
}

Repository 생성

@Repository를 DB 로직을 작성한다.
\src\main\java\com\example\demo\repository\TestRepository.java

package com.example.demo.repository;

import com.example.demo.entity.Test;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface TestRepository extends JpaRepository<Test, Integer> {
    Optional<Test> findById(Integer id);
}

DTO 생성

레이어간 통신되는 클래스를 작성한다.
\src\main\java\com\example\demo\dto\TestDto.java

package com.example.demo.dto;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class TestDto {
    private String testStr;

    public TestDto(String testStr) {
        this.testStr = testStr;
    }
}

📮 실행 결과

\src\main\java\com\example\demo\DemoApplication.java 에서 메인메서드 옆에 뜨는 run 버튼을 실행한다.

오류가 없으면 아래와 같이 터미널에 나타난다. localhost로 build가 된 상태이다.

브라우저에서 아래와 같이 접속하면 제대로 작동하는 것을 확인할 수 있다.

DB툴로 DB를 확인하면 자동으로 내가 작성 클래스의 DB가 만들어진 것을 확인할 수 있다.

🌞 참고

참고

profile
210's Velog :: Ambition Makes Us Diligent

1개의 댓글

comment-user-thumbnail
2023년 12월 12일

글 잘 보았습니다😊

답글 달기