Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Listener, Formatter 사용 본문

Project/블로그 게시판 만들기

Listener, Formatter 사용

Seung__ 2021. 10. 7. 23:03

1. Listener


  • 이벤를 관찰하고 있다가 발생하면 특정 메서드를 실행.\
  • 이를 활용해서 entity의 생성시간(@PrePersist), 수정시간(@PreUpdate)를 생성하자.
  • Listener를 직접 만들어서 사용할 수 도 있음.
 

Entity Listener - 1

Listener : 이벤트를 관찰하고 있다가 이벤트가 발생하면 특정 동작을 진행하는 것을 말한다. Entity Listener는 Entity가 동작하는 몇 가지 방법에 대한 이벤트를 관찰하고 있음. 1. Listener 관련 annotaions @

bsh-developer.tistory.com

  • 또는 스프링이 제공하는 리스너를 사용할 수도 있다.
 

Entity Listener : 3(@AuditingEntityListener)

앞에서 정보의 생성/수정시 생성된 시간/수정된 시간이 입력될 수 있도록 EntityListener를 직접 만들어서 활용했다. 2021.06.15 - [JPA] - Entity Listener - 1 Entity Listener - 1 istener : 이벤트를 관찰하고..

bsh-developer.tistory.com

 

 

2. 스프링이 제공하는 리스너 사용.


2.1 Application

  • @EnableJpaAutditing
@SpringBootApplication
@EnableJpaAuditing
public class BlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(BlogApplication.class, args);
    }

}

 

 

2.2 Entity

  • @EntityListeners : 해당 엔티티에 사용할 Listener 등록
@Entity @Getter
@EntityListeners(value = AuditingEntityListener.class)
public class Member {
@Entity @Getter
@EntityListeners(value = AuditingEntityListener.class)
public class Post {
@Entity
@Getter
@EntityListeners(value = AuditingEntityListener.class)
public class Comment {

 

2.3 @Annotation 지정

  • Member, Post, Comment 동일.
@Entity @Getter
@EntityListeners(value = AuditingEntityListener.class)
public class Member {

    @Id @Column(name = "MEMBER_ID")
    @GeneratedValue
    private Long id;

    /**
     * em.persist()전에 호출됨.
     */
    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate

 

3. 결과


  • 오 시간이 잘 들어간다.

 

 

4. 추가 수정


  • 생각해보니 현재 뷰에, 글 마지막 수정시간, 댓글 마지막 수정시간이 안들어가있다. 
  • 뷰에 반영할 수 있도록 코드를 수정하자.
  • 각 DTO에 LocalDateTime lastModifiedDate를 추가해줬다.
  • view에서는 th:text를 이용하여 해당 파라미터를 사용.
  • 다 좋은데 날짜 형식이 맘에 안든다....

 

 

5. 스프링이 제공하는 Formatter 사용


  • @Annotation기반으로 작동. 
  • Converter: 범용 Type 변환
  • Formatter: 문자 위주, 출력 형식을 변환
 

[TypeConverter] Formatter

Converter 는 입력과 출력 타입에 제한이 없는, 범용 타입 변환 기능을 제공 하지만 개발자는 문자를 다른 타입으로 변환하거나, 다른 타입을 문자로 변환하는 상황이 대부분이다. 문자를 다른 객

bsh-developer.tistory.com

  • Thymeleaf에서 ${{...}}를 사용하면 Thymeleaf에서 제공하는 기본 format사용 가능.
    • 21.10.7. 오후 10:00 과 같은 형식
  • 만약 형식을 변경하고 싶으면 DTO의 해당 파라미터에 annotation 적용
  • dto에 적용하는 이유는 dto가 view로 넘어가기 때문.
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastModifiedDate;

 

 

6. 수정 결과


  • 글 목록, 글 상세 화면에서 작성/수정일자 확인 가능

 

7. 앞으로..


  • Test용 data 서버시작할 때 DB에 올리기
  • Listener
    • createdAt, updatedAt등
  • 게시글에 작성자 표시
  • 댓글 삭제 버튼
  • 대댓글
  • 검증 & 예외처리
    • 회원 가입시 필수 정보 지정.
    • 데이터 타입 지정
  • 인증처리
    • 로그인한 사용자만 글 & 댓글 작성 가능.
    • 본인이 작성한 글, 댓글만 삭제 가능
    • 관리자는 모든 권한
  • 예외처리
  • 페이징 처리
  • 컬렉션 조회 최적화

 

 

8. GitHub: 211007 lastModifiedDAte


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

Comments