Skip to content

Commit d24015f

Browse files
amdegregoriomaibin
authored andcommitted
BAEL 2824 (eugenp#6971)
* BAEL-2727 Example Code * Example code for BAEL-2824
1 parent 696fa09 commit d24015f

5 files changed

Lines changed: 195 additions & 0 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.baeldung.like.model;
2+
3+
import javax.persistence.Entity;
4+
import javax.persistence.GeneratedValue;
5+
import javax.persistence.GenerationType;
6+
import javax.persistence.Id;
7+
8+
@Entity
9+
public class Movie {
10+
@Id
11+
@GeneratedValue(strategy = GenerationType.SEQUENCE)
12+
private Long id;
13+
private String title;
14+
private String director;
15+
private String rating;
16+
private int duration;
17+
18+
public Long getId() {
19+
return id;
20+
}
21+
22+
public void setId(Long id) {
23+
this.id = id;
24+
}
25+
26+
public String getTitle() {
27+
return title;
28+
}
29+
30+
public void setTitle(String title) {
31+
this.title = title;
32+
}
33+
34+
public String getDirector() {
35+
return director;
36+
}
37+
38+
public void setDirector(String director) {
39+
this.director = director;
40+
}
41+
42+
public String getRating() {
43+
return rating;
44+
}
45+
46+
public void setRating(String rating) {
47+
this.rating = rating;
48+
}
49+
50+
public int getDuration() {
51+
return duration;
52+
}
53+
54+
public void setDuration(int duration) {
55+
this.duration = duration;
56+
}
57+
58+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.baeldung.like.repository;
2+
3+
import java.util.List;
4+
5+
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.data.repository.CrudRepository;
7+
import org.springframework.data.repository.query.Param;
8+
9+
import com.baeldung.like.model.Movie;
10+
11+
public interface MovieRepository extends CrudRepository<Movie, Long> {
12+
13+
List<Movie> findByTitleContaining(String title);
14+
15+
List<Movie> findByTitleLike(String title);
16+
17+
List<Movie> findByTitleContains(String title);
18+
19+
List<Movie> findByTitleIsContaining(String title);
20+
21+
List<Movie> findByRatingStartsWith(String rating);
22+
23+
List<Movie> findByDirectorEndsWith(String director);
24+
25+
List<Movie> findByTitleContainingIgnoreCase(String title);
26+
27+
List<Movie> findByRatingNotContaining(String rating);
28+
29+
List<Movie> findByDirectorNotLike(String director);
30+
31+
@Query("SELECT m FROM Movie m WHERE m.title LIKE %:title%")
32+
List<Movie> searchByTitleLike(@Param("title") String title);
33+
34+
@Query("SELECT m FROM Movie m WHERE m.rating LIKE ?1%")
35+
List<Movie> searchByRatingStartsWith(String rating);
36+
37+
//Escaping works in SpringBoot >= 2.4.1
38+
//@Query("SELECT m FROM Movie m WHERE m.director LIKE %?#{escape([0])} escape ?#{escapeCharacter()}")
39+
@Query("SELECT m FROM Movie m WHERE m.director LIKE %:#{[0]}")
40+
List<Movie> searchByDirectorEndsWith(String director);
41+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.baeldung.like;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_METHOD;
5+
6+
import java.util.List;
7+
8+
import org.junit.Test;
9+
import org.junit.runner.RunWith;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.boot.test.context.SpringBootTest;
12+
import org.springframework.test.context.jdbc.Sql;
13+
import org.springframework.test.context.junit4.SpringRunner;
14+
15+
import com.baeldung.like.model.Movie;
16+
import com.baeldung.like.repository.MovieRepository;
17+
18+
@RunWith(SpringRunner.class)
19+
@SpringBootTest
20+
@Sql(scripts = { "/test-movie-data.sql" })
21+
@Sql(scripts = "/test-movie-cleanup.sql", executionPhase = AFTER_TEST_METHOD)
22+
public class MovieRepositoryIntegrationTest {
23+
@Autowired
24+
private MovieRepository movieRepository;
25+
26+
@Test
27+
public void givenPartialTitle_WhenFindByTitleContaining_ThenMoviesShouldReturn() {
28+
List<Movie> results = movieRepository.findByTitleContaining("in");
29+
assertEquals(3, results.size());
30+
31+
results = movieRepository.findByTitleLike("%in%");
32+
assertEquals(3, results.size());
33+
34+
results = movieRepository.findByTitleIsContaining("in");
35+
assertEquals(3, results.size());
36+
37+
results = movieRepository.findByTitleContains("in");
38+
assertEquals(3, results.size());
39+
}
40+
41+
@Test
42+
public void givenStartOfRating_WhenFindByRatingStartsWith_ThenMoviesShouldReturn() {
43+
List<Movie> results = movieRepository.findByRatingStartsWith("PG");
44+
assertEquals(6, results.size());
45+
}
46+
47+
@Test
48+
public void givenLastName_WhenFindByDirectorEndsWith_ThenMoviesShouldReturn() {
49+
List<Movie> results = movieRepository.findByDirectorEndsWith("Burton");
50+
assertEquals(1, results.size());
51+
}
52+
53+
@Test
54+
public void givenPartialTitle_WhenFindByTitleContainingIgnoreCase_ThenMoviesShouldReturn() {
55+
List<Movie> results = movieRepository.findByTitleContainingIgnoreCase("the");
56+
assertEquals(2, results.size());
57+
}
58+
59+
@Test
60+
public void givenPartialTitle_WhenSearchByTitleLike_ThenMoviesShouldReturn() {
61+
List<Movie> results = movieRepository.searchByTitleLike("in");
62+
assertEquals(3, results.size());
63+
}
64+
65+
@Test
66+
public void givenStartOfRating_SearchFindByRatingStartsWith_ThenMoviesShouldReturn() {
67+
List<Movie> results = movieRepository.searchByRatingStartsWith("PG");
68+
assertEquals(6, results.size());
69+
}
70+
71+
@Test
72+
public void givenLastName_WhenSearchByDirectorEndsWith_ThenMoviesShouldReturn() {
73+
List<Movie> results = movieRepository.searchByDirectorEndsWith("Burton");
74+
assertEquals(1, results.size());
75+
}
76+
77+
@Test
78+
public void givenPartialRating_findByRatingNotContaining_ThenMoviesShouldReturn() {
79+
List<Movie> results = movieRepository.findByRatingNotContaining("PG");
80+
assertEquals(1, results.size());
81+
}
82+
83+
@Test
84+
public void givenPartialDirector_WhenFindByDirectorNotLike_ThenMoviesShouldReturn() {
85+
List<Movie> results = movieRepository.findByDirectorNotLike("An%");
86+
assertEquals(5, results.size());
87+
}
88+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DELETE FROM Movie;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
INSERT INTO movie(id, title, director, rating, duration) VALUES(1, 'Godzilla: King of the Monsters', ' Michael Dougherty', 'PG-13', 132);
2+
INSERT INTO movie(id, title, director, rating, duration) VALUES(2, 'Avengers: Endgame', 'Anthony Russo', 'PG-13', 181);
3+
INSERT INTO movie(id, title, director, rating, duration) VALUES(3, 'Captain Marvel', 'Anna Boden', 'PG-13', 123);
4+
INSERT INTO movie(id, title, director, rating, duration) VALUES(4, 'Dumbo', 'Tim Burton', 'PG', 112);
5+
INSERT INTO movie(id, title, director, rating, duration) VALUES(5, 'Booksmart', 'Olivia Wilde', 'R', 102);
6+
INSERT INTO movie(id, title, director, rating, duration) VALUES(6, 'Aladdin', 'Guy Ritchie', 'PG', 128);
7+
INSERT INTO movie(id, title, director, rating, duration) VALUES(7, 'The Sun Is Also a Star', 'Ry Russo-Young', 'PG-13', 100);

0 commit comments

Comments
 (0)