Skip to content

Commit 6cab1df

Browse files
committed
feat: Implementación de MovieRepository con JDBC en Java
1 parent 539b6c8 commit 6cab1df

5 files changed

Lines changed: 119 additions & 1 deletion

File tree

pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@
3333
<version>5.12.2</version>
3434
<scope>test</scope>
3535
</dependency>
36+
<dependency>
37+
<groupId>org.springframework</groupId>
38+
<artifactId>spring-jdbc</artifactId>
39+
<version>6.2.11</version>
40+
</dependency>
41+
<dependency>
42+
<groupId>com.h2database</groupId>
43+
<artifactId>h2</artifactId>
44+
<version>2.4.240</version>
45+
</dependency>
3646

3747
</dependencies>
3848

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.luigi.javatest.movies.data;
2+
3+
import com.luigi.javatest.movies.model.Gender;
4+
import com.luigi.javatest.movies.model.Movie;
5+
import org.springframework.jdbc.core.JdbcTemplate;
6+
import org.springframework.jdbc.core.RowMapper;
7+
8+
import java.util.Collection;
9+
10+
public class MovieRepositoryJdbc implements MovieRepository {
11+
12+
private JdbcTemplate jdbcTemplate;
13+
14+
public MovieRepositoryJdbc(JdbcTemplate jdbcTemplate) {
15+
this.jdbcTemplate = jdbcTemplate;
16+
}
17+
18+
@Override
19+
public Movie findById(long id) {
20+
return null;
21+
}
22+
23+
@Override
24+
public Collection<Movie> findAll() {
25+
26+
return jdbcTemplate.query("select * from movies", movieMapper);
27+
}
28+
29+
@Override
30+
public void saveOrUpdate(Movie movie) {
31+
32+
}
33+
34+
private static RowMapper<Movie> movieMapper = (rs, rowNum) -> new Movie(
35+
rs.getInt("id"),
36+
rs.getString("name"),
37+
rs.getInt("minutes"),
38+
Gender.valueOf(rs.getString("gender")));
39+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE TABLE IF NOT EXISTS movies (
2+
id INT AUTO_INCREMENT PRIMARY KEY,
3+
name VARCHAR(50) NOT NULL,
4+
minutes INT NOT NULL,
5+
gender VARCHAR(50) NOT NULL
6+
);
7+
8+
INSERT INTO movies (name, minutes, gender) VALUES
9+
('Dark Knight', 152, 'ACTION'),
10+
('Memento', 113, 'THRILLER'),
11+
('Matrix', 136, 'ACTION')
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.luigi.javatest.movies.data;
2+
3+
import com.luigi.javatest.movies.model.Movie;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.core.io.ClassPathResource;
7+
import org.springframework.jdbc.core.JdbcTemplate;
8+
import org.springframework.jdbc.datasource.DriverManagerDataSource;
9+
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
10+
import org.springframework.jdbc.datasource.init.ScriptUtils;
11+
import javax.sql.DataSource;
12+
import java.sql.SQLException;
13+
import java.util.Arrays;
14+
import java.util.Collection;
15+
import java.util.List;
16+
import java.util.stream.Collectors;
17+
18+
import static com.luigi.javatest.movies.service.MovieServiceShould.getMoviesIds;
19+
import static org.junit.jupiter.api.Assertions.*;
20+
21+
public class MovieRepositoryIntegrationTest {
22+
private MovieRepositoryJdbc movieRepository;
23+
private DriverManagerDataSource dataSource;
24+
25+
@BeforeEach
26+
void setUp() {
27+
// 1. Configurar la conexión a la base de datos H2 en memoria
28+
dataSource = new DriverManagerDataSource();
29+
dataSource.setDriverClassName("org.h2.Driver");
30+
// Añadimos DB_CLOSE_DELAY=-1 para que la tabla no desaparezca
31+
dataSource.setUrl("jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_DELAY=-1");
32+
dataSource.setUsername("sa");
33+
dataSource.setPassword("sa");
34+
35+
// 2. Cargamos el script
36+
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
37+
populator.addScript(new ClassPathResource("sql-scripts/test-data.sql"));
38+
39+
// 3. Ejecutamos el populator sobre el datasource
40+
populator.execute(dataSource);
41+
42+
// 4. Inicializar el repositorio
43+
movieRepository = new MovieRepositoryJdbc(new JdbcTemplate(dataSource));
44+
}
45+
46+
@Test
47+
public void load_all_movies() throws SQLException {
48+
// Ejecutar
49+
Collection<Movie> movies = movieRepository.findAll();
50+
51+
// Validar (Usamos una pequeña utilidad local para obtener IDs)
52+
List<Integer> moviesIds = movies.stream().map(Movie::getId).collect(Collectors.toList());
53+
54+
assertEquals(Arrays.asList(1, 2, 3), moviesIds);
55+
}
56+
57+
58+
}

src/test/java/com/luigi/javatest/movies/service/MovieServiceShould.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void return_movies_by_length() {
5757
assertEquals(Arrays.asList(2, 3, 4, 5, 6), getMoviesIds(movies));
5858
}
5959

60-
private static List<Integer> getMoviesIds(Collection<Movie> movies) {
60+
public static List<Integer> getMoviesIds(Collection<Movie> movies) {
6161
return movies.stream()
6262
.map(Movie::getId)
6363
.collect(Collectors.toList());

0 commit comments

Comments
 (0)