Skip to content

Commit 26a01c2

Browse files
authored
Merge pull request #17844 from Michaelin007/jpaguide
https://jira.baeldung.com/browse/BAEL-8679
2 parents 7f92b8a + b33cfdc commit 26a01c2

File tree

8 files changed

+312
-0
lines changed

8 files changed

+312
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.baeldung.spring.jpa.guide;
2+
3+
import com.baeldung.spring.jpa.guide.model.Publishers;
4+
import com.baeldung.spring.jpa.guide.repository.PublisherRepository;
5+
import org.springframework.boot.CommandLineRunner;
6+
import org.springframework.boot.SpringApplication;
7+
import org.springframework.boot.autoconfigure.SpringBootApplication;
8+
import org.springframework.context.annotation.Bean;
9+
10+
@SpringBootApplication
11+
public class JpaGuideApp {
12+
13+
public static void main(String[] args) {
14+
SpringApplication.run(JpaGuideApp.class, args);
15+
}
16+
17+
@Bean
18+
public CommandLineRunner demo(PublisherRepository publisherRepository) {
19+
return (args) -> {
20+
publisherRepository.save(new Publishers("Spring", "Dallas", 10));
21+
};
22+
}
23+
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.baeldung.spring.jpa.guide;
2+
3+
import com.baeldung.spring.jpa.guide.model.Publishers;
4+
import com.baeldung.spring.jpa.guide.service.PublisherService;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.web.bind.annotation.*;
8+
9+
import java.util.List;
10+
11+
@RestController
12+
@RequestMapping("/publishers")
13+
public class PublisherController {
14+
15+
private final PublisherService publisherService;
16+
17+
@Autowired
18+
public PublisherController(PublisherService publisherService) {
19+
this.publisherService = publisherService;
20+
}
21+
22+
@PostMapping("/save")
23+
public ResponseEntity<Publishers> save(@RequestBody Publishers publishers) {
24+
Publishers savedPublisher = publisherService.save(publishers);
25+
return ResponseEntity.ok(savedPublisher);
26+
}
27+
28+
@GetMapping("/all")
29+
public ResponseEntity<List<Publishers>> findAll() {
30+
List<Publishers> publishersList = publisherService.findAll();
31+
return ResponseEntity.ok(publishersList);
32+
}
33+
34+
@GetMapping("/{id}")
35+
public ResponseEntity<Publishers> findById(@PathVariable int id) {
36+
Publishers publisher = publisherService.findById(id);
37+
return ResponseEntity.ok(publisher);
38+
}
39+
40+
@PutMapping("/update")
41+
public ResponseEntity<Publishers> update(@RequestBody Publishers publishers) {
42+
Publishers updatedPublisher = publisherService.update(publishers);
43+
return ResponseEntity.ok(updatedPublisher);
44+
}
45+
46+
@DeleteMapping("/{id}")
47+
public ResponseEntity<Void> delete(@PathVariable int id) {
48+
publisherService.delete(id);
49+
return ResponseEntity.noContent()
50+
.build();
51+
}
52+
53+
@GetMapping("/location/{location}")
54+
public ResponseEntity<List<Publishers>> findAllByLocation(@PathVariable String location) {
55+
List<Publishers> publishersList = publisherService.findAllByLocation(location);
56+
return ResponseEntity.ok(publishersList);
57+
}
58+
59+
@GetMapping("/min-journals")
60+
public ResponseEntity<List<Publishers>> findPublishersWithMinJournalsInLocation(@RequestParam int minJournals, @RequestParam String location) {
61+
List<Publishers> publishersList = publisherService.findPublishersWithMinJournalsInLocation(minJournals, location);
62+
return ResponseEntity.ok(publishersList);
63+
}
64+
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.baeldung.spring.jpa.guide.model;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.GenerationType;
6+
import jakarta.persistence.Id;
7+
8+
@Entity
9+
public class Publishers {
10+
@Id
11+
@GeneratedValue(strategy = GenerationType.IDENTITY)
12+
private int id;
13+
private String name;
14+
private String location;
15+
private int journals;
16+
17+
public Publishers() {
18+
}
19+
20+
public Publishers(String name, String location, int journals) {
21+
this.name = name;
22+
this.location = location;
23+
this.journals = journals;
24+
}
25+
26+
public int getId() {
27+
return id;
28+
}
29+
30+
public void setId(int id) {
31+
this.id = id;
32+
}
33+
34+
public String getName() {
35+
return name;
36+
}
37+
38+
public void setName(String name) {
39+
this.name = name;
40+
}
41+
42+
public String getLocation() {
43+
return location;
44+
}
45+
46+
public void setLocation(String location) {
47+
this.location = location;
48+
}
49+
50+
public int getJournals() {
51+
return journals;
52+
}
53+
54+
public void setJournals(int journals) {
55+
this.journals = journals;
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.baeldung.spring.jpa.guide.repository;
2+
3+
import com.baeldung.spring.jpa.guide.model.Publishers;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Query;
6+
import java.util.List;
7+
8+
public interface PublisherRepository extends JpaRepository<Publishers, Integer> {
9+
10+
List<Publishers> findAllByLocation(String location);
11+
12+
@Query("SELECT p FROM Publishers p WHERE p.journals > :minJournals AND p.location = :location")
13+
List<Publishers> findPublishersWithMinJournalsInLocation(int minJournals, String location);
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.baeldung.spring.jpa.guide.service;
2+
3+
import com.baeldung.spring.jpa.guide.model.Publishers;
4+
import com.baeldung.spring.jpa.guide.repository.PublisherRepository;
5+
import org.springframework.stereotype.Service;
6+
7+
import java.util.List;
8+
9+
@Service
10+
public class PublisherService {
11+
12+
private final PublisherRepository publisherRepository;
13+
14+
public PublisherService(PublisherRepository publisherRepository) {
15+
this.publisherRepository = publisherRepository;
16+
}
17+
18+
public Publishers save(Publishers publishers) {
19+
return publisherRepository.save(publishers);
20+
}
21+
22+
public List<Publishers> findAll() {
23+
return publisherRepository.findAll();
24+
}
25+
26+
public Publishers findById(int id) {
27+
return publisherRepository.findById(id)
28+
.orElseThrow(() -> new RuntimeException("Publisher not found"));
29+
}
30+
31+
public void delete(int id) {
32+
publisherRepository.deleteById(id);
33+
}
34+
35+
public Publishers update(Publishers publishers) {
36+
return publisherRepository.save(publishers);
37+
}
38+
39+
public List<Publishers> findAllByLocation(String location) {
40+
return publisherRepository.findAllByLocation(location);
41+
}
42+
43+
public List<Publishers> findPublishersWithMinJournalsInLocation(int minJournals, String location) {
44+
return publisherRepository.findPublishersWithMinJournalsInLocation(minJournals, location);
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
spring.datasource.driver-class-name=org.h2.Driver
2+
spring.datasource.username=sa
3+
spring.datasource.password=
4+
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
5+
spring.jpa.hibernate.ddl-auto=update
6+
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

persistence-modules/spring-jpa-2/src/main/resources/application.properties

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ spring.datasource.driver-class-name=org.h2.Driver
33
spring.datasource.username=sa
44
spring.datasource.password=
55
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
6+
spring.profiles.active=h2
67

78
# MySQL
89
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.baeldung.jpaguide;
2+
3+
import com.baeldung.spring.jpa.guide.model.Publishers;
4+
import com.baeldung.spring.jpa.guide.repository.PublisherRepository;
5+
import com.baeldung.spring.jpa.guide.service.PublisherService;
6+
import org.junit.Test;
7+
8+
import java.util.Arrays;
9+
import java.util.List;
10+
import java.util.Optional;
11+
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertNotNull;
14+
import static org.mockito.Mockito.mock;
15+
import static org.mockito.Mockito.spy;
16+
import static org.mockito.Mockito.times;
17+
import static org.mockito.Mockito.verify;
18+
import static org.mockito.Mockito.when;
19+
import static org.mockito.ArgumentMatchers.any;
20+
import static org.mockito.ArgumentMatchers.anyInt;
21+
import static org.mockito.ArgumentMatchers.anyString;
22+
23+
public class JpaGuideUnitTest {
24+
25+
@Test
26+
public void givenPublisher_whenSave_thenPublisherIsSaved() {
27+
PublisherRepository publisherRepository = mock(PublisherRepository.class);
28+
PublisherService publisherService = spy(new PublisherService(publisherRepository));
29+
Publishers publishers = new Publishers("Springer", "Dallas", 10);
30+
when(publisherRepository.save(any(Publishers.class))).thenReturn(publishers);
31+
publisherService.save(publishers);
32+
verify(publisherRepository, times(1)).save(any(Publishers.class));
33+
}
34+
35+
@Test
36+
public void givenPublishers_whenFindAll_thenReturnAllPublishers() {
37+
PublisherRepository publisherRepository = mock(PublisherRepository.class);
38+
PublisherService publisherService = new PublisherService(publisherRepository);
39+
List<Publishers> publishersList = Arrays.asList(new Publishers("Springer", "Dallas", 10), new Publishers("O'Reilly", "San Francisco", 20));
40+
when(publisherRepository.findAll()).thenReturn(publishersList);
41+
42+
List<Publishers> result = publisherService.findAll();
43+
44+
assertEquals(2, result.size());
45+
verify(publisherRepository, times(1)).findAll();
46+
}
47+
48+
@Test
49+
public void givenPublisherId_whenFindById_thenReturnPublisher() {
50+
PublisherRepository publisherRepository = mock(PublisherRepository.class);
51+
PublisherService publisherService = new PublisherService(publisherRepository);
52+
Publishers publisher = new Publishers("Springer", "Dallas", 10);
53+
when(publisherRepository.findById(anyInt())).thenReturn(Optional.of(publisher));
54+
55+
Publishers result = publisherService.findById(1);
56+
57+
assertNotNull(result);
58+
verify(publisherRepository, times(1)).findById(anyInt());
59+
}
60+
61+
@Test
62+
public void givenPublisher_whenUpdate_thenPublisherIsUpdated() {
63+
PublisherRepository publisherRepository = mock(PublisherRepository.class);
64+
PublisherService publisherService = new PublisherService(publisherRepository);
65+
Publishers publisher = new Publishers("Springer", "Dallas", 10);
66+
when(publisherRepository.save(any(Publishers.class))).thenReturn(publisher);
67+
68+
Publishers result = publisherService.update(publisher);
69+
70+
assertNotNull(result);
71+
verify(publisherRepository, times(1)).save(any(Publishers.class));
72+
}
73+
74+
@Test
75+
public void givenLocation_whenFindAllByLocation_thenReturnPublishersInLocation() {
76+
PublisherRepository publisherRepository = mock(PublisherRepository.class);
77+
PublisherService publisherService = new PublisherService(publisherRepository);
78+
List<Publishers> publishersList = Arrays.asList(new Publishers("Springer", "Dallas", 10), new Publishers("O'Reilly", "Dallas", 20));
79+
when(publisherRepository.findAllByLocation(anyString())).thenReturn(publishersList);
80+
81+
List<Publishers> result = publisherService.findAllByLocation("Dallas");
82+
83+
assertEquals(2, result.size());
84+
verify(publisherRepository, times(1)).findAllByLocation(anyString());
85+
}
86+
87+
@Test
88+
public void givenMinJournalsAndLocation_whenFindPublishersWithMinJournalsInLocation_thenReturnPublishers() {
89+
PublisherRepository publisherRepository = mock(PublisherRepository.class);
90+
PublisherService publisherService = new PublisherService(publisherRepository);
91+
List<Publishers> publishersList = Arrays.asList(new Publishers("Springer", "Dallas", 10), new Publishers("O'Reilly", "Dallas", 20));
92+
when(publisherRepository.findPublishersWithMinJournalsInLocation(anyInt(), anyString())).thenReturn(publishersList);
93+
94+
List<Publishers> result = publisherService.findPublishersWithMinJournalsInLocation(5, "Dallas");
95+
96+
assertEquals(2, result.size());
97+
verify(publisherRepository, times(1)).findPublishersWithMinJournalsInLocation(anyInt(), anyString());
98+
}
99+
}

0 commit comments

Comments
 (0)