Batch Upsert (Insert/Update) dans MyBatis pour Oracle
Contexte :
Dans MyBatis, vous devez insérer ou mettre à jour une liste d'objets dans une base de données Oracle tout en gérant les doublons potentiels. La solution actuelle implique une boucle manuelle et des opérations d'insertion/mise à jour séparées, ce qui est inefficace.
Solution :
Pour optimiser le processus, envisagez d'utiliser les capacités de traitement par lots de MyBatis et celles d'Oracle. fonctionnalité « fusionner ». Cependant, la fusion par lots n'est pas directement prise en charge dans MyBatis.
Approche recommandée :
Pour réaliser une insertion par lots, suivez les étapes suivantes :
Exemple de code :
public void updateRecords(final List<GisObject> objectsToUpdate) { final SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(ExecutorType.BATCH); try { final GisObjectMapper mapper = sqlSession.getMapper(GisObjectMapper.class); for (final GisObject gisObject : objectsToUpdate) { mapper.updateRecord(gisObject); } sqlSession.commit(); } finally { sqlSession.close(); } }
Remarque :
Assurez-vous que les méthodes de mise à jour/insertion dans le mappeur sont correctement configurées pour les opérations d'enregistrement unique. Utiliser foreach ou générer une instruction SQL géante pour le traitement par lots n'est pas recommandé.
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!