要简化这个问题,是否有可能使spring表现为非常基本的活动记录模式
背景:
我的系统有多种类型的现有数据模型,所有数据都存储在只读表中。当用户将数据输入系统时,使用UID将输入与现有行进行比较,以使输入数据与现有数据相匹配。
问题:
我想使用spring从现有数据构造对象进行比较,这样我就可以轻松添加和配置数据模型。我不想使用hibernate或任何其他复杂的ORM,因为我只需要读访问权限,并希望系统尽可能简单轻巧,所以我正在考虑一个简单的spring jdbc模板。
我应该如何传递importId来构造对象?我可以创建一个setter方法,但是我必须调用构造函数并且有一个空的对象,直到我设置id,此时我开始初始化其他变量,这看起来很尴尬。有没有标准的方法来做到这一点?我怀疑我可能会遗漏一些明显的东西。这样做还有其他建议吗?
不会陷入代码陷阱,从现有数据构造的对象类的示例可能是:
public class Import extends Model {
private JdbcTemplate mJdbcTemplate;
private int mImportId;
public Import(int importId, JdbcTemplate template) {
this.mImportId = importId;
this.mJdbcTemplate = jdbcTemplate;
...
// construct object form fields
...
}
...
// Other stuff
...
}
<beans>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
...
data source setup
...
</bean>
<bean id="import" class="package.models.Import">
<constructor-arg ref="jdbcTemplate"/>
... what to do here...
</bean>
</beans>
答案 0 :(得分:2)
你需要什么工具是一个RowMapper for Object,然后你可以使用jdbcTemplate.queryForObject
方法。
public Import getImportById(long id) {
return jdbcTemplate.queryForObject(
"Select a, b FROM import WHERE id = ?",
this.importRowMapper,
id);
}
private RowMapper<Import> importRowMapper = new RowMapper<Import>() {
public Customer mapRow(ResultSet resultSet, int i) throws SQLException {
long id = resultSet.getInt("id");
String a = resultSet.getString("a");
String b = resultSet.getString("b");
return new Customer(id, a, b);
}
你可以看一下这个博客:Green Beans: Getting Started with Spring in your Service Tier,它对此有所描述。 (此博客的最后一部分仅涉及JPA。)