obtenir l'auto-genearated clé pour l'enregistrement inséré dans mybatis
Je suis travaille dans une application web qui utilisent spring mvc + mybatis + mysql.
Et j'ai constaté que je ne peux pas obtenir l'auto-clé générée pour le dernier enregistrement inséré (j'ai googlé tellement).
C'est la configuration associées(prendre le modèle "Post" par exemple):
spring.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 config.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>
Dao:
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";
}
}
Cependant,lorsque j'insère un nouveau Post à la base de données:
postDao.add(post);
Je ne peux pas obtenir l'identifiant généré pour le post inséré. J'ai toujours de 1. Je sais que c'est la ligne concernés nombre.
Aussi,j'ai lu le mybatis guide,et j'ai essayé ceci:
<insert id="insert" parameterType="Post" useGeneratedKeys="true" keyProperty="id">
Mais il semble que cela ne fonctionne pas.
Comment résoudre ce problème?
OriginalL'auteur hguser | 2012-09-03
Vous devez vous connecter pour publier un commentaire.
En fait, les travaux suivants:
sera de retour 1 comme avant,mais
post.getId()
obtiendrez la clé.OriginalL'auteur hguser
Cela peut être fait à l'aide d'annotations.
Ensemble
keyProperty
le Java nom de la variable.Ensemble
keyColumn
comme le nom de la colonne dans la base de données.Après l'insertion,
post.getId()
aurez votre ID généré.OriginalL'auteur user2601995
Essayez d'utiliser le code suivant; j'ai ajouté le keyColumn champ à votre code:
Alternativement, si vous utilisez PostgreSql:
OriginalL'auteur Ruju