diff --git a/.idea/compiler.xml b/.idea/compiler.xml index db06ab1..3fa7bae 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,6 +7,7 @@ + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index c6d4cac..bd15f4b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,44 @@ com.zipcode.lab jpaentity 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + + + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.12.3 + + + mysql + mysql-connector-java + 8.0.23 + + + junit + junit + RELEASE + test + + + + org.hibernate + hibernate-core + 5.5.3.Final + + \ No newline at end of file diff --git a/src/main/java/entities/Album.java b/src/main/java/entities/Album.java new file mode 100644 index 0000000..3627135 --- /dev/null +++ b/src/main/java/entities/Album.java @@ -0,0 +1,74 @@ +package entities; + +import javax.persistence.*; + +@Entity +@Table(name = "Album") +public class Album { + + @Id + private Long id; + private String title; + private String genre; + private String artistName; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "name", nullable = false) + private Artist artist; + + public Album(){} + + public Album(Long id, String title, String genre, String artistName, Artist artist){ + this.id = id; + this.title = title; + this.genre = genre; + this.artistName = artistName; + this.artist = artist; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getGenre() { + return genre; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public String getArtistName() { + return artistName; + } + + public void setArtistName(String artistName) { + this.artistName = artistName; + } + + public Artist getArtist() { return artist; } + + public void setArtist(Artist artist) { this.artist = artist; } + + @Override + public String toString() { + return "Painting {" + + "ID = " + id + + ", Title = " + title + + ", Medium = " + genre + + ", Artist = " + artistName + + "}"; + } +} diff --git a/src/main/java/entities/Artist.java b/src/main/java/entities/Artist.java new file mode 100644 index 0000000..153c0e1 --- /dev/null +++ b/src/main/java/entities/Artist.java @@ -0,0 +1,71 @@ +package entities; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "Artist") +public class Artist { + + @Id + private Long id; + private String name; + private String instrument; + private Integer age; + + @OneToMany(mappedBy = "artist", cascade = CascadeType.ALL, + fetch = FetchType.LAZY, orphanRemoval = true) + private Set album = new HashSet<>(); + + public Artist() {} + + public Artist(Long id, String name, String instrument, Integer age) { + this.id = id; + this.name = name; + this.instrument = instrument; + this.age = age; + } + + 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 getInstrument() { + return instrument; + } + + public void setInstrument(String instrument) { + this.instrument = instrument; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + @Override + public String toString() { + return "Artist {" + + "ID = " + id + + ", Name = " + name + + ", Birth Place = " + instrument + + ", Birth Year = " + age + + "}"; + } +} diff --git a/src/main/java/entities/DELETEME.txt b/src/main/java/entities/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/main/NewMainApp.java b/src/main/java/main/NewMainApp.java new file mode 100644 index 0000000..27f54ba --- /dev/null +++ b/src/main/java/main/NewMainApp.java @@ -0,0 +1,47 @@ +package main; + +import entities.Artist; +import entities.Album; +import services.ArtistService; +import services.AlbumService; +import java.util.ArrayList; +import java.util.List; + +public class NewMainApp { + + public static void main(String[] args) { + + ArtistService artistService = new ArtistService(); + AlbumService albumService = new AlbumService(); + List artistList = new ArrayList<>(); + List albumList = new ArrayList<>(); + + Artist artist1 = new Artist(1L, "Dippity", "Triangle", 20); + Artist artist2 = new Artist(2L, "Pandotopanzanite", "Vocals", 45); + artistList.add(artist1); + artistList.add(artist2); + + Album album1 = new Album(1L, "All Them Dips", "Hip Hop", "Dippity", artist1); + Album album2 = new Album(2L, "Gems", "Rock", "Pandotopanzanite", artist2); + albumList.add(album1); + albumList.add(album2); + + + //CREATE + artistService.createMultiple(artistList); + albumService.createMultiple(albumList); + + + //READ + Artist art1 = artistService.findById(1L); + Artist art2 = artistService.findById(2L); + System.out.println(art1.toString()); + System.out.println(art2.toString()); + + Album alb1 = albumService.findById(1L); + Album alb2 = albumService.findById(2L); + System.out.println(alb1.toString()); + System.out.println(alb2.toString()); + + } +} diff --git a/src/main/java/services/AlbumService.java b/src/main/java/services/AlbumService.java new file mode 100644 index 0000000..24b7ff5 --- /dev/null +++ b/src/main/java/services/AlbumService.java @@ -0,0 +1,57 @@ +package services; + +import entities.Album; +import java.util.List; + +public class AlbumService implements Service { + + + public void create(Album album) { + entityManager.getTransaction().begin(); + entityManager.persist(album); + entityManager.getTransaction().commit(); + } + + public void createMultiple(List list) { + entityManager.getTransaction().begin(); + list.stream() + .forEach(album -> entityManager.persist(album)); + entityManager.getTransaction().commit(); + } + + public List findAll() { + return entityManager.createQuery("SELECT p FROM Painting p", Album.class).getResultList(); + } + + public Album findById(Long id) { + Album album = entityManager.find(Album.class, id); + return album; + } + + public void update(Long id, Album newAlbumData) { + entityManager.getTransaction().begin(); + Album album = entityManager.find(Album.class, id); + + album.setId(newAlbumData.getId()); + album.setTitle(newAlbumData.getTitle()); + album.setGenre(newAlbumData.getGenre()); + album.setArtistName(newAlbumData.getArtistName()); + + entityManager.getTransaction().commit(); + } + + public void delete(Long id) { + Album album = entityManager.find(Album.class, id); + entityManager.getTransaction().begin(); + entityManager.remove(album); + entityManager.getTransaction().commit(); + System.out.printf("%s has been deleted", album.toString()); + } + + public void delete(Album album) { + entityManager.getTransaction().begin(); + entityManager.remove(album); + entityManager.getTransaction().commit(); + System.out.printf("%s has been deleted", album.toString()); + } +} diff --git a/src/main/java/services/ArtistService.java b/src/main/java/services/ArtistService.java new file mode 100644 index 0000000..ab56f3d --- /dev/null +++ b/src/main/java/services/ArtistService.java @@ -0,0 +1,57 @@ +package services; + +import entities.Artist; +import java.util.List; + +public class ArtistService implements Service { + + + public void create(Artist artist) { + entityManager.getTransaction().begin(); + entityManager.persist(artist); + entityManager.getTransaction().commit(); + } + + public void createMultiple(List list) { + entityManager.getTransaction().begin(); + list.stream() + .forEach(artist -> entityManager.persist(artist)); + entityManager.getTransaction().commit(); + } + + public List findAll() { + return entityManager.createQuery("SELECT a FROM Artist a", Artist.class).getResultList(); + } + + public Artist findById(Long id) { + Artist artist = entityManager.find(Artist.class, id); + return artist; + } + + public void update(Long id, Artist newArtistData) { + entityManager.getTransaction().begin(); + Artist artist = entityManager.find(Artist.class, id); + + artist.setId(newArtistData.getId()); + artist.setName(newArtistData.getName()); + artist.setInstrument(newArtistData.getInstrument()); + artist.setAge(newArtistData.getAge()); + + entityManager.getTransaction().commit(); + } + + public void delete(Long id) { + Artist artist = entityManager.find(Artist.class, id); + entityManager.getTransaction().begin(); + entityManager.remove(artist); + entityManager.getTransaction().commit(); + System.out.printf("%s has been deleted", artist.toString()); + } + + public void delete(Artist artist) { + entityManager.getTransaction().begin(); + entityManager.remove(artist); + entityManager.getTransaction().commit(); + System.out.printf("%s has been deleted", artist.toString()); + } +} diff --git a/src/main/java/services/DELETEME.txt b/src/main/java/services/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/services/Service.java b/src/main/java/services/Service.java new file mode 100644 index 0000000..dec9c22 --- /dev/null +++ b/src/main/java/services/Service.java @@ -0,0 +1,14 @@ +package services; + +import javax.persistence.*; + + +public interface Service { + + @PersistenceUnit + EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("myunit"); + @PersistenceContext + EntityManager entityManager = managerFactory.createEntityManager(); + +} + diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..21811ab --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/src/test/java/entities/AlbumTest.java b/src/test/java/entities/AlbumTest.java new file mode 100644 index 0000000..87ee3a3 --- /dev/null +++ b/src/test/java/entities/AlbumTest.java @@ -0,0 +1,124 @@ +package entities; + +import org.junit.Assert; +import org.junit.Test; + +public class AlbumTest { + + Artist artist = new Artist(1L, "Edward Hopper", "New York", 1882); + + @Test + public void testGetId() { + //given + Long expected = 1L; + Album album = new Album(1L, "Nighthawks", "oil", "Edward Hopper", artist); + //when + Long actual = album.getId(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetId() { + //given + Long expected = 1L; + Album album = new Album(); + //when + album.setId(expected); + Long actual = album.getId(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetTitle() { + //given + String expected = "Nighthawks"; + Album album = new Album(1L, "Nighthawks", "oil", "Edward Hopper", artist); + //when + String actual = album.getTitle(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetTitle() { + //given + String expected = "Nighthawks"; + Album album = new Album(); + //when + album.setTitle(expected); + String actual = album.getTitle(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetMedium() { + //given + String expected = "oil"; + Album album = new Album(1L, "Nighthawks", "oil", "Edward Hopper", artist); + //when + String actual = album.getGenre(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetMedium() { + //given + String expected = "oil"; + Album album = new Album(); + //when + album.setGenre(expected); + String actual = album.getGenre(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetArtistName() { + //given + String expected = "Edward Hopper"; + Album album = new Album(1L, "Nighthawks", "oil", "Edward Hopper", artist); + //when + String actual = album.getArtistName(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetArtistName() { + //given + String expected = "Edward Hopper"; + Album album = new Album(); + //when + album.setArtistName(expected); + String actual = album.getArtistName(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetArtist() { + //given + Artist expected = artist; + Album album = new Album(1L, "Nighthawks", "oil", "Edward Hopper", artist); + //when + Artist actual = album.getArtist(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetArtist() { + //given + Artist expected = new Artist(1L, "Edward Hopper", "New York", 1882); + Album album = new Album(); + //when + album.setArtist(expected); + Artist actual = album.getArtist(); + //then + Assert.assertEquals(expected, actual); + } +} \ No newline at end of file diff --git a/src/test/java/entities/ArtistTest.java b/src/test/java/entities/ArtistTest.java new file mode 100644 index 0000000..de5faf4 --- /dev/null +++ b/src/test/java/entities/ArtistTest.java @@ -0,0 +1,100 @@ +package entities; + +import org.junit.Assert; +import org.junit.Test; + + +public class ArtistTest { + + @Test + public void testGetId() { + //given + Long expected = 1L; + Artist artist = new Artist(expected, "Edward Hopper", "New York", 1882); + //when + Long actual = artist.getId(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetId() { + //given + Long expected = 1L; + Artist artist = new Artist(); + //when + artist.setId(expected); + Long actual = artist.getId(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetName() { + //given + String expected = "Edward Hopper"; + Artist artist = new Artist(1L, "Edward Hopper", "New York", 1882); + //when + String actual = artist.getName(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetName() { + //given + String expected = "Edward Hopper"; + Artist artist = new Artist(); + //when + artist.setName(expected); + String actual = artist.getName(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetBirthPlace() { + //given + String expected = "New York"; + Artist artist = new Artist(1L, "Edward Hopper", "New York", 1882); + //when + String actual = artist.getInstrument(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetBirthPlace() { + //given + String expected = "New York"; + Artist artist = new Artist(); + //when + artist.setInstrument(expected); + String actual = artist.getInstrument(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testGetBirthYear() { + //given + Integer expected = 1882; + Artist artist = new Artist(1L, "Edward Hopper", "New York", 1882); + //when + Integer actual = artist.getAge(); + //then + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetBirthYear() { + //given + Integer expected = 1882; + Artist artist = new Artist(); + //when + artist.setAge(expected); + Integer actual = artist.getAge(); + //then + Assert.assertEquals(expected, actual); + } +} \ No newline at end of file diff --git a/src/test/java/entities/DELETEME.txt b/src/test/java/entities/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/services/AlbumServiceTest.java b/src/test/java/services/AlbumServiceTest.java new file mode 100644 index 0000000..5c348f0 --- /dev/null +++ b/src/test/java/services/AlbumServiceTest.java @@ -0,0 +1,116 @@ +package services; + +import entities.Artist; +import entities.Album; +import org.junit.Assert; +import org.junit.Test; +import java.util.ArrayList; +import java.util.List; + +public class AlbumServiceTest { + + AlbumService albumService = new AlbumService(); + Artist vanGogh = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + Artist hopper = new Artist(2L, "Edward Hopper", "New York", 1882); + + + @Test + public void testCreate() { + //given + Album album = new Album(1L, "Almond Blossom", "oil", "Vincent van Gogh", vanGogh); + String expected = album.toString(); + //when + albumService.create(album); + Album album1 = albumService.findById(1L); + String actual = album1.toString(); + //then + Assert.assertEquals(expected, actual); + albumService.delete(album); + } + + @Test + public void testFindAll() { + //given + Album almondBlossom = new Album(1L, "Almond Blossom", "oil", "Vincent van Gogh", vanGogh); + Album nightHawks = new Album(2L, "NightHawks", "oil", "Edward Hopper", hopper); + List list = new ArrayList<>(); + list.add(almondBlossom); + list.add(nightHawks); + String expected = list.toString(); + //when + albumService.createMultiple(list); + String actual = albumService.findAll().toString(); + //then + Assert.assertEquals(expected, actual); + albumService.delete(almondBlossom); + albumService.delete(nightHawks); + } + + @Test + public void testFindById() { + //given + Album album = new Album(1L, "Almond Blossom", "oil", "Vincent van Gogh", vanGogh); + List list = new ArrayList<>(); + list.add(album); + String expected = album.toString(); + //when + albumService.create(album); + Album album1 = albumService.findById(1L); + String actual = album1.toString(); + //then + Assert.assertEquals(expected, actual); + albumService.delete(album); + } + + @Test + public void testUpdate() { + //given + Album almondBlossom = new Album(1L, "Almond Blossom", "oil", "Vincent van Gogh", vanGogh); + Album nightHawks = new Album(1L, "NightHawks", "oil", "Edward Hopper", hopper); + String expected = nightHawks.toString(); + //when + albumService.create(almondBlossom); + albumService.update(1L, nightHawks); + Album album = albumService.findById(1L); + String actual = album.toString(); + //then + Assert.assertEquals(expected, actual); + albumService.delete(album); + } + + @Test + public void testDeleteByID() { + //given + Album almondBlossom = new Album(1L, "Almond Blossom", "oil", "Vincent van Gogh", vanGogh); + Album nightHawks = new Album(2L, "NightHawks", "oil", "Edward Hopper", hopper); + List list = new ArrayList<>(); + list.add(almondBlossom); + list.add(nightHawks); + int expected = 1; + //when + albumService.createMultiple(list); + albumService.delete(2L); + int actual = albumService.findAll().size(); + //then + Assert.assertEquals(expected, actual); + albumService.delete(1L); + } + + @Test + public void testDeleteByObject() { + //given + Album almondBlossom = new Album(1L, "Almond Blossom", "oil", "Vincent van Gogh", vanGogh); + Album nightHawks = new Album(2L, "NightHawks", "oil", "Edward Hopper", hopper); + List list = new ArrayList<>(); + list.add(almondBlossom); + list.add(nightHawks); + int expected = 1; + //when + albumService.createMultiple(list); + albumService.delete(nightHawks); + int actual = albumService.findAll().size(); + //then + Assert.assertEquals(expected, actual); + albumService.delete(1L); + } +} diff --git a/src/test/java/services/ArtistServiceTest.java b/src/test/java/services/ArtistServiceTest.java new file mode 100644 index 0000000..7f15694 --- /dev/null +++ b/src/test/java/services/ArtistServiceTest.java @@ -0,0 +1,112 @@ +package services; + +import entities.Artist; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class ArtistServiceTest { + + ArtistService artistService = new ArtistService(); + + + @Test + public void testCreate() { + //given + Artist artist = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + String expected = artist.toString(); + //when + artistService.create(artist); + Artist artist1 = artistService.findById(1L); + String actual = artist1.toString(); + //then + Assert.assertEquals(expected, actual); + artistService.delete(artist); + } + + @Test + public void testFindAll() { + //given + Artist vanGogh = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + Artist hopper = new Artist(2L, "Edward Hopper", "New York", 1882); + List list = new ArrayList<>(); + list.add(vanGogh); + list.add(hopper); + String expected = list.toString(); + //when + artistService.createMultiple(list); + String actual = artistService.findAll().toString(); + //then + Assert.assertEquals(expected, actual); + artistService.delete(vanGogh); + artistService.delete(hopper); + } + + @Test + public void testFindById() { + //given + Artist artist = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + String expected = artist.toString(); + //when + artistService.create(artist); + Artist artist1 = artistService.findById(1L); + String actual = artist1.toString(); + //then + Assert.assertEquals(expected, actual); + artistService.delete(artist); + } + + @Test + public void testUpdate() { + //given + Artist vanGogh = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + Artist hopper = new Artist(1L, "Edward Hopper", "New York", 1882); + String expected = hopper.toString(); + //when + artistService.create(vanGogh); + artistService.update(1L, hopper); + Artist artist = artistService.findById(1L); + String actual = artist.toString(); + //then + Assert.assertEquals(expected, actual); + artistService.delete(artist); + } + + @Test + public void testDeleteByID() { + //given + Artist vanGogh = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + Artist hopper = new Artist(2L, "Edward Hopper", "New York", 1882); + List list = new ArrayList<>(); + list.add(vanGogh); + list.add(hopper); + int expected = 1; + //when + artistService.createMultiple(list); + artistService.delete(2L); + int actual = artistService.findAll().size(); + //then + Assert.assertEquals(expected, actual); + artistService.delete(1L); + } + + @Test + public void testDeleteByObject() { + //given + Artist vanGogh = new Artist(1L, "Vincent van Gogh", "Netherlands", 1853); + Artist hopper = new Artist(2L, "Edward Hopper", "New York", 1882); + List list = new ArrayList<>(); + list.add(vanGogh); + list.add(hopper); + int expected = 1; + //when + artistService.createMultiple(list); + artistService.delete(hopper); + int actual = artistService.findAll().size(); + //then + Assert.assertEquals(expected, actual); + artistService.delete(1L); + } +} \ No newline at end of file diff --git a/src/test/java/services/DELETEME.txt b/src/test/java/services/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/target/classes/META-INF/persistence.xml b/target/classes/META-INF/persistence.xml new file mode 100644 index 0000000..21811ab --- /dev/null +++ b/target/classes/META-INF/persistence.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/target/classes/entities/Album.class b/target/classes/entities/Album.class new file mode 100644 index 0000000..c5b8693 Binary files /dev/null and b/target/classes/entities/Album.class differ diff --git a/target/classes/entities/Artist.class b/target/classes/entities/Artist.class new file mode 100644 index 0000000..e167daa Binary files /dev/null and b/target/classes/entities/Artist.class differ diff --git a/target/classes/main/NewMainApp.class b/target/classes/main/NewMainApp.class new file mode 100644 index 0000000..ecb1b7c Binary files /dev/null and b/target/classes/main/NewMainApp.class differ diff --git a/target/classes/services/AlbumService.class b/target/classes/services/AlbumService.class new file mode 100644 index 0000000..aa60577 Binary files /dev/null and b/target/classes/services/AlbumService.class differ diff --git a/target/classes/services/ArtistService.class b/target/classes/services/ArtistService.class new file mode 100644 index 0000000..3a98c2a Binary files /dev/null and b/target/classes/services/ArtistService.class differ diff --git a/target/classes/services/Service.class b/target/classes/services/Service.class new file mode 100644 index 0000000..3f5f910 Binary files /dev/null and b/target/classes/services/Service.class differ diff --git a/target/test-classes/entities/AlbumTest.class b/target/test-classes/entities/AlbumTest.class new file mode 100644 index 0000000..ba48e07 Binary files /dev/null and b/target/test-classes/entities/AlbumTest.class differ diff --git a/target/test-classes/entities/ArtistTest.class b/target/test-classes/entities/ArtistTest.class new file mode 100644 index 0000000..9f43650 Binary files /dev/null and b/target/test-classes/entities/ArtistTest.class differ diff --git a/target/test-classes/services/AlbumServiceTest.class b/target/test-classes/services/AlbumServiceTest.class new file mode 100644 index 0000000..f6fb6ed Binary files /dev/null and b/target/test-classes/services/AlbumServiceTest.class differ diff --git a/target/test-classes/services/ArtistServiceTest.class b/target/test-classes/services/ArtistServiceTest.class new file mode 100644 index 0000000..d38214b Binary files /dev/null and b/target/test-classes/services/ArtistServiceTest.class differ