我正在使用 spring mvc + mybatis + mysql 的 Web 应用程序下工作。
而且我发现我无法为最后插入的记录获取自动生成的密钥(我已经搜索了很多)。
这是相关配置(以模型'Post'为例):
春天.xml:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
//omitted
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="config.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
mybatis 配置.xml
<configuration>
<typeAliases>
<typeAlias alias="Post" type="com.king.model.Post" />
</typeAliases>
<mappers>
<mapper resource="com/king/model/PostMapper.xml" />
</mappers>
</configuration>
PostMapper.xml:
<mapper namespace="com.king.model.PostMapper">
<insert id="insert" parameterType="Post">
insert into posts (title,body,created_at,updated_at) values (#{title},#{body},#{createDate},#{updateDate})
</insert>
</mapper>
道:
public abstract class AbstractSimpleDaoImpl<T> extends SqlSessionDaoSupport{
@Override
public int add(T entity) {
return getSqlSession().insert(getMapperNamespace() + ".insert", entity);
}
protected abstract String getMapperNamespace();
}
public class PostDao extends AbstractSimpleDaoImpl<Post> {
@Override
protected String getMapperNamespace() {
return "com.king.model.PostMapper";
}
}
但是,当我将新帖子插入数据库时:
postDao.add(post);
我无法为插入的帖子获取生成的 ID。我总是得到 1。我知道这是受行影响的数字。
另外,我阅读了 mybatis 指南,并尝试了这个:
<insert id="insert" parameterType="Post" useGeneratedKeys="true" keyProperty="id">
但似乎,这不起作用。
如何解决?