Mybatis 3.0.5 insérer/mettre à jour la déclaration de cartographie avec plusieurs entrées
Peut-être que je suis absent quelque chose d'évident, mais je ne peux pas obtenir un simple mappé instruction insert de l'exécution avec succès.
À l'aide de l'interface suivante
public interface CustomItemMapper
{
Integer insert(CustomItem item, @Param("extra") String someparam);
}
et suivants de mappage XML
<insert id="insert" useGeneratedKeys="false" parameterType="map" keyProperty="id">
insert into CustomItem (id, column2, column3, column4, column5, column6)
values (#{id}, #{field2}, #{field3}, #{field4}, #{field5}, #{extra})
</insert>
et ce code
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) servletContext.getAttribute("SqlSessionFactory");
SqlSession session = sqlSessionFactory.openSession();
try
{
CustomItemMapper mapper = session.getMapper(CustomItemMapper.class);
mapper.update(item);
session.commit();
}
finally
{
session.close();
}
- Je obtenir la suite de la sortie de débogage:
Checked out connection 368716606 from pool.
ooo Connection Opened
==> Executing: insert into CustomItem (id, column2, column3, column4, column5, column6) values (?, ?, ?, ?, ?, ?)
==> Parameters: null, null, null, null, null, actual_value_of_extra(String)
xxx Connection Closed
Returned connection 368716606 to pool.
suivie par l'exception SQL (ne peut pas entrer une valeur null dans la id
colonne).
Donc la seule valeur qui a été transmise correctement est extra chaîne fournie. J'ai vérifié que les noms de champ sont corrects et l'objet n'est pas nul à ce point et que les champs sont remplis correctement.
J'ai aussi essayé d'utiliser parameterType="CustomItem"
au lieu de parameterType="map"
mais le résultat n'a pas changé.
Je vous serais reconnaissant si quelqu'un pourrait me permettre de savoir ce que je suis en manque ici.
Merci d'avance.
PS: je suis dans le même problème avec insert, ainsi.
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier le nom de l'autre paramètre dans votre mappeur de méthode. Je suis en supposant que CustomItem est un Java bean, avec des méthodes get pour champ1 etc. Comme déjà mentionné, modifier votre paramètre de type, de sorte que ce n'est pas la Carte.
De mybatis la documentation,
Changez votre Mappeur,
et de changer votre xml,
item
dans le xml).Si vous êtes de passage à une instance de
CustomItem
dans leupdate()
appel, puis laparameterType
devrait certainement être le nom pleinement qualifié de la classe, et pas"map"
- vous utiliser ce dernier uniquement si vous avez été en passant unjava.util.Map
à lainsert()
méthode.select
consolidés) et de l'alias, mais les résultats sont les mêmes. Pour lever le doute, j'ai essayé le nom pleinement qualifié il y a un moment et rien n'a changé.