반응형

 

mysql 간단한 blog 테이블 만들기

-- mydb.tb_blog definition

CREATE TABLE mydb.tb_blog (
	blog_id BIGINT auto_increment NOT NULL,
	blog_title varchar(100) NOT NULL,
	blog_content varchar(100) NOT NULL,
	reg_dt DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
	upd_dt DATETIME DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL,
	PRIMARY KEY (`blog_id`)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;

 

 

spring jpa 라이브러리 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.mysql:mysql-connector-j'
    ...
}

 

entity 생성

@Getter
@Setter
@Entity
@Table(name="tb_blog")
public class TbBlog {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long blogId;

    @Column(nullable = false, length = 100)
    private String blogTitle;

    @Column(name = "blog_content", nullable = false, length = 100)
    private String blogContent;

    @CreationTimestamp
    @Column(updatable = false)
    private LocalDateTime regDt;

    @UpdateTimestamp
    @Column
    private LocalDateTime updDt;
}

 

@Respository 생성

@Repository
public interface TbBlogRepository extends JpaRepository<TbBlog, Long> {


}


dto 클래스 생성

@Setter
@Getter
public class BlogReq {

    private Long blogId;
    private String blogTitle;
    private String blogContent;
}

create 메소드 

public TbBlog createBlog(BlogReq req) {
    TbBlog tbBlog = new TbBlog();
    tbBlog.setBlogTitle(req.getBlogTitle());
    tbBlog.setBlogContent(req.getBlogContent());

    return tbBlogRepository.save(tbBlog); // 생성된 로또 번호 Set 반환
}

 

update 메소드

public TbBlog updateBlog(BlogReq req) {
    TbBlog tbBlog = new TbBlog();
    tbBlog.setBlogId(req.getBlogId());
    tbBlog.setBlogTitle(req.getBlogTitle());
    tbBlog.setBlogContent(req.getBlogContent());

    return tbBlogRepository.save(tbBlog); // 생성된 로또 번호 Set 반환
}

 

test 용 전체 데이터 조회 메소드

public List<TbBlog> getListAll() {
    return tbBlogRepository.findAll();
}

 

특정 id 를 조회하는 메소드 

public TbBlog getBlogId(Long blogId) {
    Optional<TbBlog> blog = tbBlogRepository.findById(blogId);
    return blog.get(); // 생성된 로또 번호 Set 반환
}

/**
 * Optional.isPresent() 메서드를 사용하여 값이 존재하는지 확인한 후에 값을 처리하는 방법입니다.
 */
public TbBlog getBlogByIdV1(Long blogId) {
    Optional<TbBlog> blog = tbBlogRepository.findById(blogId);
    if (blog.isPresent()) {
        return blog.get();
    } else {
        // 값이 없을 경우 예외를 던지거나 다른 처리를 합니다.
        throw new BlogNotFoundException("Blog not found with id: " + blogId);
    }
}

/**
 * orElse() 메서드 사용
 * Optional에 값이 없을 경우 기본 값을 반환하는 방법입니다.
 */
public TbBlog getBlogByIdV2(Long blogId) {
    Optional<TbBlog> blog = tbBlogRepository.findById(blogId);
    return blog.orElse(null); // 또는 적절한 기본값을 설정할 수 있습니다.
}

/**
 * orElseThrow() 메서드 사용
 * Optional에 값이 없을 경우 예외를 던지는 방법입니다.
 */
public TbBlog getBlogByIdV3(Long blogId) {
    return tbBlogRepository.findById(blogId)
            .orElseThrow(() -> new BlogNotFoundException("Blog not found with id: " + blogId));
}

Exception 클래스 추가 

public class BlogNotFoundException extends RuntimeException {
    public BlogNotFoundException(String message) {
        super(message);
    }
}

 


Optional 이라는 메소드

Optional은 Java 8에서 도입된 유틸리티 클래스입니다. 이 클래스는 주어진 값이 존재할 수도 있고, 존재하지 않을 수도 있는 상황을 처리하기 위한 도구입니다. Optional은 널(null) 참조로 인한 NullPointerException을 피하고, 더 명확하고 안전한 코드를 작성하는 데 도움이 됩니다.

controller 참고하세요

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/blog")
public class BlogController {

    private final BlogService blogService;


    @GetMapping(value = "/list-all")
    public ResponseEntity<Object> getBlogList() {
        return ResponseEntity.ok(blogService.getListAll());
    }

    @GetMapping(value = "/detail/{blogId}")
    public ResponseEntity<Object> getBlogDetail(
            @PathVariable Long blogId
    ) {
        return ResponseEntity.ok(blogService.getListAll());
    }


    @PostMapping(value = "/create")
    public ResponseEntity<Object> postBlog(BlogReq req) {
        return ResponseEntity.ok(blogService.createBlog(req));
    }

    @PutMapping(value = "/update/{blogId}")
    public ResponseEntity<Object> putBlog(
                BlogReq req) {
        return ResponseEntity.ok(blogService.updateBlog(req));
    }
}

 

반응형

+ Recent posts