diff --git a/persistence-modules/spring-jdbc/src/main/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAO.java b/persistence-modules/spring-jdbc/src/main/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAO.java index 15da78ce35..77b69daa01 100644 --- a/persistence-modules/spring-jdbc/src/main/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAO.java +++ b/persistence-modules/spring-jdbc/src/main/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAO.java @@ -1,10 +1,12 @@ package com.baeldung.spring.jdbc.template.testing; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Repository; - import javax.sql.DataSource; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + @Repository public class EmployeeDAO { private JdbcTemplate jdbcTemplate; @@ -20,4 +22,21 @@ public class EmployeeDAO { public int getCountOfEmployees() { return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM EMPLOYEE", Integer.class); } + + public Employee getEmployeeById(int id) { + RowMapper employeeRowMapper = (rs, rowNum) -> new Employee(rs.getInt("ID"), rs.getString("FIRST_NAME"), rs.getString("LAST_NAME")); + + return jdbcTemplate.queryForObject("SELECT * FROM EMPLOYEE WHERE id=?", employeeRowMapper, id); + } + + public Employee getEmployeeByIdV2(int id) { + RowMapper employeeRowMapper = (rs, rowNum) -> new Employee(rs.getInt("ID"), rs.getString("FIRST_NAME"), rs.getString("LAST_NAME")); + + try { + return jdbcTemplate.queryForObject("SELECT * FROM EMPLOYEE WHERE id=?", employeeRowMapper, id); + } catch (EmptyResultDataAccessException e) { + return null; + } + } + } \ No newline at end of file diff --git a/persistence-modules/spring-jdbc/src/test/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAOUnitTest.java b/persistence-modules/spring-jdbc/src/test/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAOUnitTest.java index 3609300c2d..982a423996 100644 --- a/persistence-modules/spring-jdbc/src/test/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAOUnitTest.java +++ b/persistence-modules/spring-jdbc/src/test/java/com/baeldung/spring/jdbc/template/testing/EmployeeDAOUnitTest.java @@ -1,20 +1,26 @@ package com.baeldung.spring.jdbc.template.testing; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; + +import javax.sql.DataSource; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentMatchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.test.util.ReflectionTestUtils; -import javax.sql.DataSource; - -import static org.junit.jupiter.api.Assertions.assertEquals; - @RunWith(MockitoJUnitRunner.class) public class EmployeeDAOUnitTest { @Mock @@ -25,10 +31,10 @@ public class EmployeeDAOUnitTest { @Before public void setup() { dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2) - .generateUniqueName(true) - .addScript("classpath:com/baeldung/spring/jdbc/template/testing/schema.sql") - .addScript("classpath:com/baeldung/spring/jdbc/template/testing/test-data.sql") - .build(); + .generateUniqueName(true) + .addScript("classpath:com/baeldung/spring/jdbc/template/testing/schema.sql") + .addScript("classpath:com/baeldung/spring/jdbc/template/testing/test-data.sql") + .build(); } @Test @@ -36,12 +42,12 @@ public class EmployeeDAOUnitTest { EmployeeDAO employeeDAO = new EmployeeDAO(); ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate); Mockito.when(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM EMPLOYEE", Integer.class)) - .thenReturn(4); + .thenReturn(4); assertEquals(4, employeeDAO.getCountOfEmployees()); Mockito.when(jdbcTemplate.queryForObject(Mockito.anyString(), Mockito.eq(Integer.class))) - .thenReturn(3); + .thenReturn(3); assertEquals(3, employeeDAO.getCountOfEmployees()); } @@ -53,4 +59,25 @@ public class EmployeeDAOUnitTest { assertEquals(4, employeeDAO.getCountOfEmployees()); } + + @Test(expected = EmptyResultDataAccessException.class) + public void whenIdNotExist_thenThrowEmptyResultDataAccessException() { + EmployeeDAO employeeDAO = new EmployeeDAO(); + ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate); + Mockito.when(jdbcTemplate.queryForObject(anyString(), ArgumentMatchers.> any(), anyInt())) + .thenThrow(EmptyResultDataAccessException.class); + + employeeDAO.getEmployeeById(1); + } + + @Test + public void whenIdNotExist_thenReturnNull() { + EmployeeDAO employeeDAO = new EmployeeDAO(); + ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate); + Mockito.when(jdbcTemplate.queryForObject(anyString(), ArgumentMatchers.> any(), anyInt())) + .thenReturn(null); + + assertNull(employeeDAO.getEmployeeByIdV2(1)); + } + }