Préface
MyBatis est un cadre de persistance de données très couramment utilisé dans le développement d'ingénierie Web. Grâce à ce cadre, nous pouvons facilement ajouter, supprimer, modifier et rechercher la base de données. Lorsqu'une connexion de base de données entraîne des transactions, elle consomme beaucoup de ressources. Si des données plus mises à jour doivent être insérées et qu'une seule données est soumise pour chaque transaction, elle entraînera un énorme gaspillage de ressources de base de données, entraînant une baisse significative des performances de la base de données et des performances du système.
En ce qui concerne l'insertion par lots de MyBatis, la plupart des exemples sur Internet concernent les bases de données MySQL, et il y a moins d'exemples sur les bases de données Oracle. Cet article vous présentera le contenu pertinent sur l'Oracle + MyBatis Insertion, la mise à jour et la suppression. Je ne dirai pas beaucoup ci-dessous, jetons un coup d'œil à l'introduction détaillée ensemble.
1. Insérer
(1) La première méthode: utilisez la balise <ForEach> pour générer des données virtuelles via Union All pour obtenir l'insertion de lots (vérifiée)
<insert id = "insertbatchlatcontactrecord" parametertype = "java.util.map"> <selectKey resultType = "java.lang.long" keyproperty = "dto.id" order = "avant"> SEQU (id, contracte_id, contact_add_name, contact_add_type, contact_add_phone, contact_add_home_address, contact_add_work, contact_add_work_address, create_by, create_time, modify_by, modify_time, valide_state, sys_source, isquery) select) SEQ_LA_T_CONTACT_RECORD.NEXTVAL, A. * From (<ForeEach Collection = "List" Item = "DTO" index = "index" séparateur = "Union All"> SELECT # {dto.contractId, jdbcType = varchar}, # {dto.contacteraddname, jdbcType = varChar} , # {dto.contactaddType, jdbcType = varchar}, # {dto.contactaddphone, jdbcType = varchar}, # {dto.contactaddhomeaddress, jdbcType = varchar}, # {dto.ContactAddwork, jdbcType = varchar} , # {dto.contactaddwork, jdbcType = varchar}, # {dto.contactaddworkAddress, jdbcType = varchar}, # {dto.createby, jdbcType = Decimal}, systimestamp, # {dto.modify , # {dto.modifytime, jdbcType = Timestamp}, '1', # {dto.sysSource, jdbcType = varchar}, # {dto.isquery, jdbcType = varchar} de dual </ forheachRemarque: Le paramètre d'entrée doit être une collection de liste, et il n'y a pas de valeurs dans l'instruction SQL;
(2) La deuxième méthode: utilisez des procédures stockées pour réaliser l'insertion du lot (vérifié)
<insert id = "insertplanrepaymentotherfeebatch" ParameterType = "java.util.list"> begin <foreach collection = "list" item = "item" index = "index"> insert dans lb_t_plan_repayment_otherfee (id, key, valeur, terme, contrac_id, pay_Order, fee_name, dans_id) VALEURS (SEQ_LB_T_PLAN_REPAY_OTHERFEE.NEXTVAL, # {item.key, jdbcType = varchar}, # {item.value, jdbcType = varchar}, # {item.term, jdbcType = varchar} , # {item.payOrder, jdbcType = décimal}, # {item.feename, jdbcType = varchar}, # {item.inToid, jdbcType = varchar}); </foreach> fin; </sère>Remarque: les paramètres entrants sont toujours des collections de liste, et il existe des valeurs dans SQL, qui utilise essentiellement des procédures stockées pour implémenter l'insertion de lots;
(3) La troisième méthode: utilisez des instructions SQL spéciales (rechercher en ligne, en attendant d'être vérifiée)
Blog de référence: http://blog.csdn.net/w_y_t_/article/details/51416201
L'instruction SQL suivante peut implémenter l'insertion par lots d'une instruction!
Insérez tout dans userInfo (userId, username) valeurs ('1001', 'Tom') dans userInfo (userId, nom d'utilisateur) ('1002', 'Black') dans userInfo (userrid, nom d'utilisateur) ('1003', 'Jetty') dans userInfo (userrid, nom d'utilisateur) Valeurs ('1004', 'Cat') Sélectionnez 1 sur Dual; <insert id = "BatchInserser" ParameterType = "java.util.arrayList"> Insérez all <foreach collection = "list" item = "userList" index = "index"> dans userInfo (userId, username) (# {userList.Userrid}, # # # # # # # # {userList.user}) </ofoEach>Remarque: lorsque la taille de la liste est supérieure à 500, elle échouera;
2. Mise à jour
(1) La première méthode: utilisez également des procédures stockées (recherche en ligne, le blog ci-dessus)
<update id = "BatchUpDateUser" ParameterType = "java.util.arraylist"> <foreach collection = "list" item = "userList" index = "index" open = "begin" close = "; end;" séparateur = ";"> Mettre à jour userInfo t <Set> t.userid = # {userList.Userrid, jdbcType = varchar}, t.username = # {userList.Username, jdbcType = varchar}, </ set> où t.Userrid = # {userList.Userid, jdbcType = Varchar}(2) la deuxième méthode: les conditions d'utilisation pour réaliser (vérifié)
<update id = "updateBatchByListStat" ParameterType = "java.util.map"> Update La_T_Advfinished T1 set t1.list_stat = '07 ', t1.modify_time = systimestamp où t1.id in (<forach collection = "ids" sépator = "item =" ">' $ {id} '</ forach>) </ / upled>Remarque: vous pouvez également utiliser l'implémentation ou conditionnelle, similaire à la SQL supprimée ci-dessous;
3. Supprimer
Similaire à la deuxième mise à jour
<delete id = "DeleTeATTractions" ParameterType = "java.util.list"> delete from Attractions <Where> <Foreach Collection = "list" index = "index" item = "item" open = "(" séparateur = "ou" close = ")"> id = # {item.id} </ foreach> </ where> </ Delete>Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.