λ³΄ν΅ Entityλ ν΄λΉ λ°μ΄ν°μ μμ±μκ°κ³Ό μμ μκ°μ ν¬ν¨νλ€. μ΄λ¬ν μμ±/μμ μ 보λ νμ μ μ§λ³΄μμ μμ΄μ κ΅μ₯ν μ€μν μ 보μ΄κΈ° λλ¬Έμ νμ λ°μ΄ν°μ ν¨κ» μ μ₯ν΄μ£Όλκ² μ’λ€. νμ§λ§ μ΄λ₯Ό λ§€λ² DBμ μ½μ ν λ λ μ§ λ°μ΄ν°λ₯Ό λ±λ‘/μμ νλ μ½λλ₯Ό λ§λ€μ΄ μ£Όλ κ²μ μ½λλ λ무 μ§μ λΆνκ³ , λ무 λ§μ λ Έλλ ₯μ΄ λ€μ΄κ°λ μΌμΌ κ²μ΄λ€. κ·Έλμ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ JPA Auditingμ μ¬μ©ν΄μ μ΄λ₯Ό μλν ν΄λ³΄μ.
μ°μ board ν
μ΄λΈμ μμ± μκ°μ ν΄λΉνλ created_date
μ μμ μκ°μ ν΄λΉνλ modified_date
λ₯Ό μΆκ°νλ€.
κ·Έλ¦¬κ³ λ°μ΄ν°μ λ μ§λ₯Ό μΆκ°ν΄μ£ΌκΈ° μν΄μ TimeEntityλ₯Ό λ§λ€μ΄μ£Όμ
TimeEntity.java
package com.studyweb.webboard.entity;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class TimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
@MappedSuperClass
@EntityListners(AuditingEntityListener.class)
@CreatedDate
@LastModifiedDate
package com.studyweb.webboard.entity;
import lombok.Data;
import lombok.Getter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@Entity
@Data
public class Board extends TimeEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
private String author;
//μμ μ μν μμ±μ
public Board(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
//κΈ°λ³Έ μμ±μ μΆκ°!
public Board() {
}
}
μ΄λ κ² λ§λ€μ΄μ€ TimeEntityλ₯Ό EntityμΈ Boardμ μμν΄μ€λ€.
@SpringBootApplication
@EnableJpaAuditing
public class WebboardApplication {
public static void main(String[] args) {
SpringApplication.run(WebboardApplication.class, args);
}
}
κ·Έλ¦¬κ³ JPA Auditingμ νμ±νν μ μλλ‘ Application ν΄λμ€μ νμ±ν μ΄λ Έν μ΄μ μ μΆκ°ν΄μ£Όλ©΄, μλμΌλ‘ λ°μ΄ν°λ² μ΄μ€μ μμ±μκ°κ³Ό μμ μκ°μ ν¬ν¨νμ¬ μ μ₯ν μ μλ€.
μ§κΈκΉμ§ κΈ°λ₯μ μΆκ°νμΌλ, μ€μ λ‘ μ μ©μ΄ λλμ§ μμ±μ ν΄λ³΄μ.
μ μ μ©μ΄ λλμ§ νμΈ νκΈ° μν΄ μ μ¬μ§κ³Ό κ°μ΄ κ²μκΈμ μμ±μ ν΄μ€λ€. μ μ μ©μ΄ λμλ€λ©΄ κ²μκΈμ΄ μμ±μ΄ λλ©΄μ DBμ μμ±μκ°μ΄ μ μ₯λμ΄ μμ κ²μ΄λ€.
DB νμΈ
DBλ₯Ό νμΈν΄λ³΄λ μμ±μκ°μ΄ μ μ μ₯λ κ²μ μ μ μλ€.
μμ μκ° νμΈμ μν κ²μκΈ μμ±
μ΄μ μμ μκ°λ μ μ©μ΄ λλμ§ νμΈμ ν΄μΌνλ€. λ°λΌμ, μμ²λΌ κ²μκΈμ μμ νκ² λ€.
DB νμΈ
DBλ₯Ό νμΈν΄λ³΄λ μμ±μκ°κ³Ό μμ μκ° λͺ¨λ μ μ₯λμ΄μλ κ²μ λ³Ό μ μλ€.
μμ± μκ°κ³Ό μμ μκ°μ κ²μκΈμμ νμΈνλλ‘ μμ
<!--μμ± μκ°κ³Ό μμ μκ°μ λνλ΄κΈ° μν htmlμ½λ-->
<span th:if="${post.getCreatedDate() == post.getModifiedDate()}">
<span th:text="'μμ± μκ°: ' + ${#temporals.format(post.getCreatedDate(), 'yyyy.MM.dd HH:mm:ss')}"></span>
</span>
<span th:if="${post.getCreatedDate() != post.getModifiedDate()}">
<span th:text="'μμ± μκ°: ' + ${#temporals.format(post.getCreatedDate(), 'yyyy.MM.dd HH:mm:ss')}"></span><br>
<span th:text="'μμ μκ°: ' + ${#temporals.format(post.getModifiedDate(), 'yyyy.MM.dd HH:mm:ss')}"></span>
</span>
μ΄μ κ²μκΈμ μμ± μκ°κ³Ό μμ μκ°μ λνλ΄μ£Όλ htmlμ μΆκ°ν΄μ κ²μκΈ μμΈ νμ΄μ§μμ νμΈμ ν μ μλλ‘ νμλ€.
λ€μ κΈμ νμ΄μ§ μ²λ¦¬μ λν΄μ μμ±νκ² μ΅λλ€. κΈμμ λΆμ‘±ν λΆλΆμ΄ λ§μ κ² κ°μ΅λλ€. λͺ¨λ μ§μ μ νμν©λλ€!!
λ μμΈν μ½λλ κΉνλΈλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ!
κΉνλΈ: https://github.com/pp8817/ToyProjectBoard