Skip to content
🇬🇧 Read in English

Exécuter des instructions SQL en lot avec Java

← Posts 2 min read

Les expressions régulières sont un outil puissant dans la boîte à outils de tout développeur Java. Elles permettent de valider des entrées, d’analyser des chaînes de caractères et d’effectuer des transformations textuelles complexes en quelques lignes de code. Toutefois, cette puissance s’accompagne d’un coût caché en termes de performances si elle n’est pas utilisée correctement.

La clé pour exploiter efficacement les regex en Java réside dans la compréhension de la classe java.util.regex.Pattern. Dans cet article, nous explorerons les bonnes pratiques d’utilisation de Pattern, comment éviter les pièges de performance courants, et pourquoi il faut se méfier des méthodes regex « pratiques » de la classe String.

Approches génériques

API JDBC

PreparedStatement.addBatch() + executeBatch() Gestion manuelle des lots, erreurs partielles, getUpdateCounts()

JPA

Flush manuel en boucle (persist() + flush() + clear() toutes les N entités) Limites : pas de addBatch direct ; dépend du provider pour l’ordre/optimisation

Utilisation de builders/DSL

JOOQ

dslContext.batch(insert…).execute() Avantage : type-safe, génère du vrai batch JDBC

MyBatis

SqlSessionFactory.openSession(ExecutorType.BATCH) <foreach> pour lots dynamiques

Utilisation d’un ORM

Hibernate

Propriétés : hibernate.jdbc.batch_size, hibernate.order_inserts/updates @BatchSize sur entités/collections session.flush()/clear() obligatoire

Blaze persistence

Pièges et bonnes pratiques

Le choix de l’approche

Toute abstraction au-dessus du driver introduit une surcharge supplémentaire.

Quand clear() est vital (mémoire, génération d’ID) Erreurs de batch (tout le lot échoue si une ligne est invalide, sauf avec continueOnError) Comparaison : JDBC > DSL > ORM pour les performances brutes ; ORM pour la simplicité avec les entités


Références

Démo

Une démonstration des concepts illustrés dans cet article est disponible ici : regex-performance-benchmark