gpt4 book ai didi

java - 如何检索数据库中的行并将其转换为 Spring 中的对象?

转载 作者:行者123 更新时间:2023-11-30 09:50:33 25 4
gpt4 key购买 nike

我正在尝试学习如何在 Spring 2.5.6 中进行 CRUD 操作。我在我的数据库中创建了一个名为 companies 的表,它有两个字段: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: Incorrect result size: expected 1, actual 0

我找不到 getCompany() 返回空结果集的原因。现在,我不知道我需要做什么,而且我仍然对 Spring 的工作原理感到困惑。它与 AbstractTransactionalDataSourceSpringContextTests 的工作方式有关吗?

附带问题:是否有任何好的资源可以演示如何在 Spring 中进行 CRUD 操作?到目前为止,我仅有的资源是 thisthis他们并没有真正提供足够的例子让我了解任何事情。

最佳答案

只需使用 spring 中的 select.queryForList 方法。希望示例会有所帮助。

从 spring 配置 xml 文件中,您可以定义数据源。几乎任何有效的 select 语句都可以工作。将此作为您想要的起点。

<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</bean>

用于检索数据的实际方法非常简单...

public List<Map<String, Object>> showTables() {

String sql = "select name from MYTABLE..sysobjects where xtype = 'U';";

JdbcTemplate select = new JdbcTemplate(sqlDataSource);

return select.queryForList(sql);
}

关于java - 如何检索数据库中的行并将其转换为 Spring 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com