Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- java
- AOP
- 스프링
- JPQL
- db
- springdatajpa
- http
- transaction
- jpa
- Greedy
- 자바
- 스프링 핵심 기능
- Android
- Proxy
- JDBC
- spring
- Servlet
- Thymeleaf
- QueryDSL
- kotlin
- SpringBoot
- 김영한
- pointcut
- Spring Boot
- 인프런
- 그리디
- 알고리즘
- Exception
- 백준
- 스프링 핵심 원리
Archives
- Today
- Total
개발자되기 프로젝트
Listener, Formatter 사용 본문
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
'Project > 블로그 게시판 만들기' 카테고리의 다른 글
글 삭제하기, cascade, orphanRemoval, 영속성 전이 (0) | 2021.10.09 |
---|---|
검색기능 추가 및 view 정비 (0) | 2021.10.09 |
글 상세 페이지에 작성자 추가 (0) | 2021.10.07 |
Test용 데이터 추가 (0) | 2021.10.07 |
현재까지 진행 상황 (0) | 2021.10.06 |
Comments