반응형
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));
}
}
반응형
'Spring > JPA' 카테고리의 다른 글
jpa 와 jpql vs queryDSL 정의 및 장단점 (0) | 2024.06.04 |
---|---|
스프링부트 jpa 시작해보기 - jpa 정의 및 jdbc 설명 (0) | 2024.05.30 |
Spring JPA Pageable 처리 - sort 및 Page 처리(totalElements) (0) | 2024.01.09 |
[spring JPA] column annotation 컬럼 매칭 레퍼런스 (0) | 2021.05.03 |
[Spring JPA] @Id와 @GeneratedValue - Primary Key 생성방법 (0) | 2021.04.02 |