首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring3.2使用SimpleJdbcInsert检索自动生成的密钥

Spring3.2使用SimpleJdbcInsert检索自动生成的密钥
EN

Stack Overflow用户
提问于 2013-10-12 07:26:56
回答 3查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
public class LoginDAOImpl extends JdbcDaoSupport implements LoginDAO {

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

JdbcDaoSupport类在Spring3.2doc中没有扩展。所以,我有两个问题:

  1. 如何在扩展SimpleJdbcInsert类的同时使用JdbcDaoSupport检索自动生成的密钥?
  2. 如果我不扩展JdbcDaoSupport,那么配置文件和dao类中的代码将发生什么变化。请查找下面的当前配置和数据代码:

配置文件:

代码语言:javascript
复制
    <bean id="loginDao" class="com.vikas.dao.LoginDAO"
    p:dataSource-ref="dataSource" />

相关doa代码:

代码语言:javascript
复制
getJdbcTemplate().update(...);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-12 13:51:57

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

SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());

这样就没有必要尝试直接获取数据源。

票数 1
EN

Stack Overflow用户

发布于 2013-10-12 13:42:32

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

配置文件:

代码语言:javascript
复制
<bean id="loginDao" class="com.vikas.dao.LoginDAOImpl"
        p:dataSource-ref="dataSource" />

DAO类:

代码语言:javascript
复制
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());
    }

}

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

票数 0
EN

Stack Overflow用户

发布于 2013-10-12 08:03:32

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19331677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档