Showing posts with label LomBok. Show all posts
Showing posts with label LomBok. Show all posts

Thursday, 3 May 2018

Using Lombok to create Builder Pattern

Applying the builder pattern to a data model is a trivial task.  Now it is able to use Lombok annotation to auto-generate it.




import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.ZonedDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

/**
 *
 * @author YNZ
 */
@Entity
@Table(name = "SHARE_ORDER")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
@EqualsAndHashCode
public class Order implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ORDER_PK")
    protected long id;

    @OneToOne
    @JoinColumn(name = "LISTER_PK_FK", referencedColumnName = "USER_PK")
    @NotNull
    protected Lister lister;

    @OneToOne
    @JoinColumn(name = "SEARCHER_PK_FK", referencedColumnName = "USER_PK")
    protected Searcher searcher;

    @Column(name = "CREATION_TIME")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    @Builder.Default
    protected ZonedDateTime createdDateTime = ZonedDateTime.now();

    @Column(name = "ACTIVATED")
    protected Boolean activated;

    @Column(name = "ORDER_START_TIME")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    protected ZonedDateTime startTime;

    @Column(name = "ORDER_END_TIME")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    protected ZonedDateTime endTime;

}



Thursday, 11 May 2017

Project Lombok


The project aims to reduce java boilerplate code. It may auto-generate getter, setters, to-string, hashcode, equals, and constructors etc.  To import it, add the following element as a child of dependecies in the pom.xml file:


<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.16</version>
</dependency>

Important: scope should be provided because we do not want Lombok jar file to be included in our build file.

Reference

Tutorial: using Lombok to reduce boilerplate code in Java

Can Jackson Deserialize Java Time ZonedDateTime

Yes, but must include JSR310. Thus ZonedDateTime can be deserialized directly from JSON response to POJO field. <dependency> <g...