为了简化这个问题,是否有可能使 spring 以非常基本的 Activity 记录模式运行
背景:
我的系统具有多种类型的现有数据模型,所有 UID 都存储在只读表中。当用户将数据输入系统时,使用 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>
最佳答案
您需要为您的对象实现一个RowMapper,然后您可以使用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 的。)
关于java - 使用 spring 从数据库构造一个对象,指定要从中构造对象的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424403/