diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml index 85ef01e704..bab544e203 100644 --- a/libraries-data/pom.xml +++ b/libraries-data/pom.xml @@ -97,6 +97,11 @@ + + com.h2database + h2 + 1.3.170 + com.fasterxml.jackson.core jackson-databind @@ -150,6 +155,16 @@ xstream 1.4.16 + + org.springframework.data + spring-data-jpa + 2.1.5.RELEASE + + + javax.persistence + javax.persistence-api + 2.2 + diff --git a/libraries-data/src/main/java/com/baeldung/objecthydration/User.java b/libraries-data/src/main/java/com/baeldung/objecthydration/User.java new file mode 100644 index 0000000000..9d879d62c4 --- /dev/null +++ b/libraries-data/src/main/java/com/baeldung/objecthydration/User.java @@ -0,0 +1,75 @@ +package com.baeldung.objecthydration; + +import java.io.Serializable; +import java.util.Objects; + +public class User implements Serializable { + private String uId; + private String firstName; + private String lastName; + private String alias; + + public User() { + } + + public User(String firstName, String uId, String lastName, String alias) { + this.firstName = firstName; + this.uId = uId; + this.lastName = lastName; + this.alias = alias; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + User user = (User) o; + return Objects.equals(firstName, user.firstName) && Objects.equals(uId, user.uId) && Objects.equals(lastName, user.lastName) && Objects.equals(alias, user.alias); + } + + public String getuId() { + return uId; + } + + public void setuId(String uId) { + this.uId = uId; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public void generateMyUser() { + this.setAlias("007"); + this.setFirstName("James"); + this.setLastName("Bond"); + this.setuId("JB"); + } + + @Override + public int hashCode() { + return Objects.hash(firstName, uId, lastName, alias); + } +} diff --git a/libraries-data/src/main/java/com/baeldung/objecthydration/UserSerialisationDeserialisation.java b/libraries-data/src/main/java/com/baeldung/objecthydration/UserSerialisationDeserialisation.java new file mode 100644 index 0000000000..c9d8c5773f --- /dev/null +++ b/libraries-data/src/main/java/com/baeldung/objecthydration/UserSerialisationDeserialisation.java @@ -0,0 +1,34 @@ +package com.baeldung.objecthydration; + +import java.io.*; + +public class UserSerialisationDeserialisation { + public void serialisedUser(User user, String outputName) { + try { + FileOutputStream fileOut = new FileOutputStream(outputName); + ObjectOutputStream out = new ObjectOutputStream(fileOut); + out.writeObject(user); + out.close(); + fileOut.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public User deserialiseUser(String serialisedFile) { + User deserializedUser = null; + try { + FileInputStream fileIn = new FileInputStream(serialisedFile); + ObjectInputStream in = new ObjectInputStream(fileIn); + deserializedUser = (User) in.readObject(); + in.close(); + fileIn.close(); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + } finally { + File f = new File(serialisedFile); + f.delete(); + } + return deserializedUser; + } +} diff --git a/libraries-data/src/main/java/com/baeldung/objecthydration/entity/Book.java b/libraries-data/src/main/java/com/baeldung/objecthydration/entity/Book.java new file mode 100644 index 0000000000..3ae22cee88 --- /dev/null +++ b/libraries-data/src/main/java/com/baeldung/objecthydration/entity/Book.java @@ -0,0 +1,71 @@ +package com.baeldung.objecthydration.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "books") +public class Book { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "author") + private String author; + + @Column(name = "isbn") + private String isbn; + + // Constructors, getters, and setters + + public Book() { + // Default constructor required by Hibernate + } + + public Book(String name, String author, String isbn) { + this.name = name; + this.author = author; + this.isbn = isbn; + } + + // Getters and setters for all attributes + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getIsbn() { + return isbn; + } + + public void setIsbn(String isbn) { + this.isbn = isbn; + } +} \ No newline at end of file diff --git a/libraries-data/src/main/java/com/baeldung/objecthydration/repository/BookRepository.java b/libraries-data/src/main/java/com/baeldung/objecthydration/repository/BookRepository.java new file mode 100644 index 0000000000..a8e92eab8e --- /dev/null +++ b/libraries-data/src/main/java/com/baeldung/objecthydration/repository/BookRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.objecthydration.repository; + +import com.baeldung.objecthydration.entity.Book; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface BookRepository extends JpaRepository { +} diff --git a/libraries-data/src/test/java/com/baeldung/objecthydration/HydrationUnitTest.java b/libraries-data/src/test/java/com/baeldung/objecthydration/HydrationUnitTest.java new file mode 100644 index 0000000000..317827346f --- /dev/null +++ b/libraries-data/src/test/java/com/baeldung/objecthydration/HydrationUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.objecthydration; + +import org.junit.Assert; +import org.junit.Test; + +public class HydrationUnitTest { + + @Test + public void givenEmptyClass_whenLazilyinitialised_thenGiveNullOnGet() { + User iamUser = new User(); + Assert.assertNull(iamUser.getuId()); + } + + @Test + public void givenInitialisedClass_withLazilyInitialised_thenDoesNotGiveNullOnGet() { + User iamUser = new User(); + iamUser.setAlias("007"); + Assert.assertNotNull(iamUser.getAlias()); + } + + @Test + public void givenEmptyClass_withHydration_thenShouldHaveAllAttributesSet() { + User jamesBond = new User(); + Assert.assertNull(jamesBond.getAlias()); + + jamesBond.generateMyUser(); + Assert.assertEquals("007", jamesBond.getAlias()); + } + + @Test + public void givenUser_thenShouldPerformUserSerialisationDeserialisation() { + User iamUser = new User(); + iamUser.setAlias("007"); + UserSerialisationDeserialisation usd = new UserSerialisationDeserialisation(); + usd.serialisedUser(iamUser, "bond.ser"); + User deserialisedUser = usd.deserialiseUser("bond.ser"); + Assert.assertEquals(iamUser.getAlias(), deserialisedUser.getAlias()); + + } +}