java - 使用 spring 从数据库构造一个对象,指定要从中构造对象的行 ID

标签 java spring orm constructor

为了简化这个问题,是否有可能使 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/

相关文章:

java - 使 Eclipse 具有颠覆性的自动更新并按计划执行 Maven 构建?

Java配置文件问题

java - <MVC :argument-resolvers> Not allowed here

php - Propel (PHP ORM),基本用法对所有(非空)表和列返回 NULL

java - 如何让带有自动换行功能的 JTextArea 随 FormLayout 一起缩小?

Java性能: private static final String vs local String ?堆空间中创建的对象数量

java - 初始化后如何调用Spring代理上的方法

java - Spring Boot 无法连接 Postgresql 数据库

orm - 查询生成器 dbflow 条件查询

postgresql - 在 JPA 后面使用 ORDBMS 而不是 RDBMS 有什么好处吗