Spring 2.5.6 で CRUD 操作を行う方法を学ぼうとしています。データベースに、id と name の 2 つのフィールドを持つ、companys というテーブルを作成しました。私がやりたいことは、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 操作を行う方法を示す優れたリソースはありますか? これまでのところ、私が持っている唯一のリソースはこれとこれであり、実際に何かを行うのに十分な例を提供していません.