我正在尝试学习如何在 Spring 2.5.6 中进行 CRUD 操作。我在我的数据库中创建了一个名为 Companies 的表,其中包含 2 个字段:id 和 name。我想要做的是使用 id 字段从表中检索一行。这就是我为它做的。
public class JdbcCompanyDao extends SimpleJdbcDaoSupport implements CompanyDao {
protected final Log logger = LogFactory.getLog(getClass());
public Company getCompany(int id) {
logger.info("Getting company with id = " + id);
Company company = getSimpleJdbcTemplate().queryForObject(
"SELECT id, name FROM companies WHERE id = " + id,
new CompanyMapper());
return company;
}
private static class CompanyMapper implements ParameterizedRowMapper<Company> {
public Company mapRow(ResultSet rs, int rowNum) throws SQLException {
Company company = new Company();
company.setId(rs.getInt("id"));
company.setName(rs.getString("name"));
return company;
}
}
}
我对其进行了单元测试,以检查我是否做对了:
public class JdbcCompanyDaoTests extends AbstractTransactionalDataSourceSpringContextTests {
private CompanyDao companyDao;
public void setCompanyDao(CompanyDao companyDao) {
this.companyDao = companyDao;
}
@Override
protected String[] getConfigLocations() {
return new String[] {"classpath:test-context.xml"};
}
@Override
protected void onSetUpInTransaction() throws Exception {
super.deleteFromTables(new String[] {"companies"});
super.executeSqlScript("file:db/load_data.sql", true);
}
public void testGetCompany() {
Company company = companyDao.getCompany(1);
assertEquals("SomeRandomCompany", company.getName());
}
}
当我运行测试时,我收到以下错误:
org.springframework.dao.EmptyResultDataAccessException:结果大小不正确:预期为 1,实际为 0
我找不到getCompany()返回空结果集的原因。现在,我不知道我需要做什么,我仍然对 Spring 的工作原理感到困惑。它与AbstractTransactionalDataSourceSpringContextTests的工作方式有关吗?
附带问题:是否有任何好的资源可以演示如何在 Spring 中进行 CRUD 操作?到目前为止,我拥有的唯一资源就是这个和这个,它们并没有真正为我提供足够的例子来让我做任何事情。