1

根据Spring 3.2 数据访问文档,SimpleJdbcInsert 可用于检索自动生成的密钥。但是,我不能在下面的代码中覆盖来自 JdbcDaoSupport 的最终方法 setDataSource:

public class LoginDAOImpl extends JdbcDaoSupport implements LoginDAO {

    // Cannot override the final method from JdbcDaoSupport
    public void setDataSource(DataSource dataSource) {
    }

JdbcDaoSupport 类未在 Spring 3.2 文档中扩展。所以,我有两个问题:

  1. 如何在扩展 JdbcDaoSupport 类时使用 SimpleJdbcInsert 检索自动生成的密钥?

  2. 如果我不扩展 JdbcDaoSupport 那么配置文件和 dao 类中的代码会发生什么变化。请在下面找到当前配置和 dao 代码:

配置文件:

    <bean id="loginDao" class="com.vikas.dao.LoginDAO"
    p:dataSource-ref="dataSource" />

相关doa代码:

getJdbcTemplate().update(...);
4

3 回答 3

1

您可以使用它的变体SimpleJDBCInsert作为JdbcTemplate构造函数参数。

SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());

这样就无需尝试直接获取数据源。

于 2013-10-12T13:51:57.167 回答
0

自动生成的密钥是在插入时生成的,而不是在更新时生成的

于 2013-10-12T08:03:32.657 回答
0

删除 JdbcDaoSupport 后,我​​可以通过以下更改使用 SimpleJdbcInsert 检索自动生成的密钥:

配置文件:

<bean id="loginDao" class="com.vikas.dao.LoginDAOImpl"
        p:dataSource-ref="dataSource" />

DAO类:

public class LoginDAOImpl implements LoginDAO {

    private JdbcTemplate jdbcTemplate;
    private SimpleJdbcInsert insertPerson;

    public void setDataSource(DataSource dataSource) {

        jdbcTemplate = new JdbcTemplate(dataSource);
        insertPerson = new SimpleJdbcInsert(dataSource).withTableName("PERSON")
                .usingGeneratedKeyColumns("PERSON_ID");
    }

    @Override
    public void addPerson(Person person) {

        SqlParameterSource parameters = new BeanPropertySqlParameterSource(
                person);
        Number newId = insertPerson.executeAndReturnKey(parameters);

        String sql = "INSERT INTO PERSON_ROLE (PERSON_ID, ROLE) VALUES (?, ?)";

        jdbcTemplate.update(sql, newId.longValue(), person.getPersonRole().getRole());
    }

}

我仍在寻找一种在扩展 JdbcDaoSupport 的同时使用 SimpleJdbcInsert 的方法。

于 2013-10-12T13:42:32.270 回答