BAEL-5742: Fix EmptyResultDataAccessException when using Jdbctemplate (#13338)
This commit is contained in:
parent
a43afaccc9
commit
db4f473262
|
@ -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<Employee> 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<Employee> 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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.<RowMapper<Employee>> 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.<RowMapper<Employee>> any(), anyInt()))
|
||||
.thenReturn(null);
|
||||
|
||||
assertNull(employeeDAO.getEmployeeByIdV2(1));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue