Oracle
 sql >> Base de données >  >> RDS >> Oracle

utiliser foreach pour faire une insertion par lot avec mybatis

Insérer dans Mybatis foreach n'est pas un lot , il s'agit d'une instruction SQL unique (qui pourrait devenir géante) et qui présente des inconvénients :

  • certaines bases de données telles qu'Oracle ne sont pas prises en charge.
  • dans les cas pertinents :il y aura un grand nombre d'enregistrements à insérer et la limite configurée de la base de données (par défaut environ 2 000 paramètres par instruction) sera atteinte, et éventuellement une erreur de pile de la base de données si l'instruction elle-même devient trop volumineuse.

L'itération sur la collection ne doit pas se faire dans le XML mybatis. Il suffit d'exécuter un simple Insert instruction dans un Java Foreach loop.La chose la plus importante est le type d'exécuteur de session .

SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
    session.insert("insertStatement", model);
}
session.flushStatements();

Je pense même qu'ici il suffira d'utiliser ExecutorType.REUSE sans vidage des instructions.

Contrairement à la valeur par défaut ExecutorType.SIMPLE , l'instruction sera préparée une fois et exécutée pour chaque enregistrement à insérer.