根据Spring 3.2 Data access docs,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 doc中扩展。所以,我有两个问题:
如何在扩展JdbcDaoSupport类时使用SimpleJdbcInsert检索自动生成的密钥?
如果我不扩展JdbcDaoSupport那么配置文件和dao类中的代码更改应该是什么。请在下面找到当前配置和dao代码:
配置文件:
<bean id="loginDao" class="com.vikas.dao.LoginDAO"
p:dataSource-ref="dataSource" />
相关的doa代码:
getJdbcTemplate().update(...);
答案 0 :(得分:1)
您可以使用SimpleJDBCInsert
的变体,其中JdbcTemplate
作为构造函数参数。
SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());
这样就无需直接尝试获取数据源。
答案 1 :(得分:0)
自动生成的密钥是在插入时生成的,而不是在更新时生成的
答案 2 :(得分: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的方法。