Lorsque nous insérons des données par lots, nous devons obtenir l'identifiant des données insérées.
De cette façon :
<insert id="insertUser" parameterType="gys.entity.User" keyProperty="userId" useGeneratedKeys="true">INSERT INTO `user` (userName) VALUES (#{userName})</insert>
Ce n'est pas un problème.
Mais parfois, cela implique une insertion par lots, et pour obtenir l'identifiant inséré
écrivez comme ceci :
<insert id="insertUserBatch1" keyProperty="userId" useGeneratedKeys="true">INSERT INTO `user` (userName) VALUES<foreach collection="list" separator="," item="item">(#{item.userName})</foreach></insert>
Une exception se produira après l'exécution comme ça.
C'est parce que la version de mybatis que vous utilisez est trop basse. Par exemple, j'utilise la version 3.2.2, qui est un bug dans mybatis.
Si vous changez. vers la version 3.4.4, il n'y aura aucun problème.
Si l'instruction SQL ci-dessus est écrite différemment, une exception sera à nouveau signalée (joindre l'insertion dans foreach)
Par exemple :
<insert id="insertUserBatch2"> <foreach collection="list" separator=";" item="item"> INSERT INTO `user` (userName) VALUES (#{item.userName}) </foreach></insert>
De la même manière, la mise à jour par lots de la mise à jour a également ce problème
<update id="updateUserBatch"><foreach collection="list" item="item" separator=";">update `user` set userName=#{item.userName} where userId=#{item.userId}</foreach></update>
C'est parce que mybatis ne peut en exécuter qu'un seul instruction SQL par défaut,
peut relier le chemin. En ajoutant des paramètres, vous pouvez exécuter plusieurs instructions SQL allowMultiQueries=true
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!