Skip to content

Commit 751f4c1

Browse files
committed
Java8 LocalDateTime
1 parent c150747 commit 751f4c1

17 files changed

Lines changed: 102 additions & 21 deletions

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@
7878
<version>2.1.2.RELEASE</version>
7979
</dependency>
8080

81+
<dependency>
82+
<groupId>org.thymeleaf.extras</groupId>
83+
<artifactId>thymeleaf-extras-java8time</artifactId>
84+
<version>2.1.0.RELEASE</version>
85+
</dependency>
86+
8187
<!-- servlet -->
8288

8389
<dependency>

src/main/java/alexp/blog/model/Comment.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package alexp.blog.model;
22

33
import alexp.blog.service.MarkdownConverter;
4+
import alexp.blog.utils.LocalDateTimePersistenceConverter;
45
import org.hibernate.validator.constraints.NotBlank;
56

67
import javax.persistence.*;
8+
import java.time.LocalDateTime;
79
import java.util.Date;
810

911
@Entity
@@ -19,9 +21,9 @@ public class Comment {
1921
@NotBlank
2022
private String commentText;
2123

22-
@Column(columnDefinition="DATETIME", nullable = false)
23-
@Temporal(TemporalType.TIMESTAMP)
24-
private Date dateTime;
24+
@Column(nullable = false)
25+
@Convert(converter = LocalDateTimePersistenceConverter.class)
26+
private LocalDateTime dateTime;
2527

2628
@ManyToOne(fetch = FetchType.EAGER)
2729
@JoinColumn(name = "user_id", nullable = false)
@@ -47,11 +49,11 @@ public String getCommentTextHtml() {
4749
return MarkdownConverter.toHtml(getCommentText());
4850
}
4951

50-
public Date getDateTime() {
52+
public LocalDateTime getDateTime() {
5153
return dateTime;
5254
}
5355

54-
public void setDateTime(Date dateTime) {
56+
public void setDateTime(LocalDateTime dateTime) {
5557
this.dateTime = dateTime;
5658
}
5759

src/main/java/alexp/blog/model/Post.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package alexp.blog.model;
22

33
import alexp.blog.service.MarkdownConverter;
4+
import alexp.blog.utils.LocalDateTimePersistenceConverter;
45
import org.hibernate.validator.constraints.NotBlank;
56
import org.hibernate.validator.constraints.NotEmpty;
67
import org.springframework.util.StringUtils;
78

89
import javax.persistence.*;
910
import javax.validation.constraints.Size;
11+
import java.time.LocalDateTime;
1012
import java.util.ArrayList;
1113
import java.util.Collection;
1214
import java.util.Date;
@@ -30,9 +32,9 @@ public class Post {
3032
@Column(nullable = false)
3133
private String fullPostText;
3234

33-
@Column(columnDefinition="DATETIME", nullable = false)
34-
@Temporal(TemporalType.TIMESTAMP)
35-
private Date dateTime;
35+
@Column(nullable = false)
36+
@Convert(converter = LocalDateTimePersistenceConverter.class)
37+
private LocalDateTime dateTime;
3638

3739
@Column(nullable = false)
3840
private boolean hidden = false;
@@ -104,11 +106,11 @@ public void setTags(Collection<Tag> tags) {
104106
this.tags = tags;
105107
}
106108

107-
public Date getDateTime() {
109+
public LocalDateTime getDateTime() {
108110
return dateTime;
109111
}
110112

111-
public void setDateTime(Date dateTime) {
113+
public void setDateTime(LocalDateTime dateTime) {
112114
this.dateTime = dateTime;
113115
}
114116

src/main/java/alexp/blog/model/User.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package alexp.blog.model;
22

33
import alexp.blog.service.MarkdownConverter;
4+
import alexp.blog.utils.LocalDateTimePersistenceConverter;
45
import org.hibernate.validator.constraints.Email;
56
import org.hibernate.validator.constraints.NotBlank;
67
import org.springframework.util.StringUtils;
78

89
import javax.persistence.*;
910
import javax.validation.constraints.Pattern;
1011
import javax.validation.constraints.Size;
12+
import java.time.LocalDateTime;
1113
import java.util.ArrayList;
1214
import java.util.Date;
1315
import java.util.List;
@@ -53,7 +55,8 @@ public interface ProfileInfoValidationGroup {}
5355
private boolean enabled;
5456

5557
@Column(nullable = false)
56-
private Date registrationDate;
58+
@Convert(converter = LocalDateTimePersistenceConverter.class)
59+
private LocalDateTime registrationDate;
5760

5861
@ManyToMany(fetch = FetchType.EAGER)
5962
@JoinTable(name = "users_roles",
@@ -109,11 +112,11 @@ public boolean isEnabled() {
109112
return enabled;
110113
}
111114

112-
public Date getRegistrationDate() {
115+
public LocalDateTime getRegistrationDate() {
113116
return registrationDate;
114117
}
115118

116-
public void setRegistrationDate(Date registrationDate) {
119+
public void setRegistrationDate(LocalDateTime registrationDate) {
117120
this.registrationDate = registrationDate;
118121
}
119122

src/main/java/alexp/blog/service/CommentServiceImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.stereotype.Service;
88

9+
import java.time.LocalDateTime;
910
import java.util.Date;
1011
import java.util.List;
1112

@@ -25,7 +26,7 @@ public List<Comment> getPostComments(Post post) {
2526

2627
@Override
2728
public void saveNewComment(Comment comment, Post post) {
28-
comment.setDateTime(new Date());
29+
comment.setDateTime(LocalDateTime.now());
2930

3031
comment.setPost(post);
3132

src/main/java/alexp/blog/service/PostServiceImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.springframework.data.domain.PageRequest;
1111
import org.springframework.data.domain.Sort;
1212
import org.springframework.stereotype.Service;
13+
14+
import java.time.LocalDateTime;
1315
import java.util.Arrays;
1416
import java.util.Date;
1517
import java.util.List;
@@ -58,7 +60,7 @@ public Post saveNewPost(PostEditDto postEditDto) {
5860

5961
fillPost(post, postEditDto);
6062

61-
post.setDateTime(new Date());
63+
post.setDateTime(LocalDateTime.now());
6264

6365
postRepository.saveAndFlush(post);
6466

src/main/java/alexp/blog/service/UserServiceImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.springframework.security.crypto.password.PasswordEncoder;
1818
import org.springframework.stereotype.Service;
1919

20+
import java.time.LocalDateTime;
2021
import java.util.ArrayList;
2122
import java.util.Date;
2223
import java.util.List;
@@ -77,7 +78,7 @@ public void register(User user) {
7778

7879
user.setEnabled(true);
7980

80-
user.setRegistrationDate(new Date());
81+
user.setRegistrationDate(LocalDateTime.now());
8182

8283
userRepository.saveAndFlush(user);
8384
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package alexp.blog.utils;
2+
3+
import java.time.LocalDate;
4+
import javax.persistence.AttributeConverter;
5+
import javax.persistence.Converter;
6+
7+
@Converter
8+
public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate, java.sql.Date> {
9+
10+
@Override
11+
public java.sql.Date convertToDatabaseColumn(LocalDate entityValue) {
12+
if (entityValue != null) {
13+
return java.sql.Date.valueOf(entityValue);
14+
}
15+
return null;
16+
}
17+
18+
@Override
19+
public LocalDate convertToEntityAttribute(java.sql.Date databaseValue) {
20+
if (databaseValue != null) {
21+
return databaseValue.toLocalDate();
22+
}
23+
return null;
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package alexp.blog.utils;
2+
3+
import java.time.LocalDateTime;
4+
import javax.persistence.AttributeConverter;
5+
import javax.persistence.Converter;
6+
7+
@Converter
8+
public class LocalDateTimePersistenceConverter implements AttributeConverter<LocalDateTime, java.sql.Timestamp> {
9+
10+
@Override
11+
public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime entityValue) {
12+
if (entityValue != null) {
13+
return java.sql.Timestamp.valueOf(entityValue);
14+
}
15+
return null;
16+
}
17+
18+
@Override
19+
public LocalDateTime convertToEntityAttribute(java.sql.Timestamp databaseValue) {
20+
if (databaseValue != null) {
21+
return databaseValue.toLocalDateTime();
22+
}
23+
return null;
24+
}
25+
}

src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<set>
4444
<bean class="nz.net.ultraq.thymeleaf.LayoutDialect"/>
4545
<bean class="org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/>
46+
<bean class="org.thymeleaf.extras.java8time.dialect.Java8TimeDialect"/>
4647
</set>
4748
</property>
4849
</bean>

0 commit comments

Comments
 (0)