Prefacio
MyBatis es un marco de persistencia de datos muy comúnmente utilizado en el desarrollo de la ingeniería web. A través de este marco, podemos agregar, eliminar, modificar y buscar fácilmente la base de datos. Cuando una conexión de base de datos comete transacciones, consume muchos recursos. Si se deben insertar datos más actualizados y solo se envían un datos para cada transacción, causará una gran pérdida de recursos de la base de datos, lo que dará como resultado una disminución significativa en el rendimiento de la base de datos y el rendimiento del sistema.
Con respecto a la inserción por lotes de MyBatis, la mayoría de los ejemplos en Internet son sobre bases de datos MySQL, y hay menos ejemplos sobre las bases de datos de Oracle. Este artículo le presentará el contenido relevante sobre Oracle+MyBatis Batch Insertion, actualización y eliminación. No diré mucho a continuación, echemos un vistazo a la introducción detallada juntos.
1. Insertar
(1) El primer método: use la etiqueta <deacheach> para generar datos virtuales a través de la unión todo para lograr la inserción por lotes (verificado)
<insert id = "insertBatchLatContAttrecord" parametertype = "java.util.map"> <selectKey dentType = "java.lang.long" keyproperty = "dto.id" orden = "antes"> seleccione SEQ_LA_T_CONTACT_RECORD.NEXTVAL AS ID de dual </SelectKey> Insert en Insert en Insert en Insert en Insert en Insertar en LA_TO_T_T_CONTACT contract_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, validate_state, sys_source, isQuery) seleccione SEQ_LA_T_CONTACT_RECORD Desde (<foreach Collection = "list" item = "dto" index = "index" separator = "union all"> select#{dto.contractID, jdbctype = varchar},#{dto.contacterAddName, jdbctype = varchar},#{dto.contactAddType, jdbctyptypypy = var varHarchar ,#{dto.contactaddphone, jdbctype = varchar},#{dto.contactaddhomeaddress, jdbctype = varchar},#{dto.contactAddwork, jdbctype = varchar},#{dto.contactaddwork, jdbctype = var varHarchar} ,#{dto.contactAddworkAddress, jdbctype = varchar},#{dto.createBy, jdbctype = decimal}, systimestamp,#{dto.modifyby, jdbctype = decimal},#{dto.modifytime, jdbctype = timestam. ,#{dto.syssource, jdbctype = varchar},#{dto.isquery, jdbctype = varchar} de dual </foreach>) a </sert>Nota: El parámetro de entrada debe ser una colección de listas, y no hay valores en la instrucción SQL;
(2) El segundo método: use procedimientos almacenados para realizar la inserción por lotes (verificado)
<Insert id = "InsertplanRepaymentMentToTheebatch" Parametertype = "java.util.list"> begin <foreach Collection = "list" item = "item" index = "index"> insertar en lb_t_plan_repayment_otherfee (id, clave, valor, término, contract_id, pay_order, feat_name, en_id) valores (SEQ_LB_T_PLAN_REPAY_OTHERFEE.NEXTVAL,#{item.key, jdbctype = varchar},#{item.value, jdbctype = varchar},#{item.term, jdbctype = decimal},#{item.contractid, jdbctype ,#{item.payorder, jdbctype = decimal},#{item.feename, jdbctype = varchar},#{item.indoid, jdbctype = varchar}); </foreach> final; </sert>Nota: Los parámetros entrantes aún son colecciones de listas, y hay valores en SQL, que esencialmente utiliza procedimientos almacenados para implementar la inserción por lotes;
(3) El tercer método: use declaraciones SQL especiales (buscando en línea, esperando ser verificada)
Blog de referencia: http://blog.csdn.net/w_y_t_/article/details/51416201
¡La siguiente declaración SQL puede implementar la inserción por lotes de una declaración!
Inserte todo en los valores de userInfo (userId, nombre de usuario) ('1001', 'tom') en usuarios de userInfo (userId, nombre de usuario) ('1002', 'negro') en usuarios de userInfo (userId, userName) ('1003', 'jetty') en userInfo (userId, userName) valores ('1004', 'Cat') seleccione 1; <insert id = "batchinsertuser" parametertype = "java.util.arrayList"> insertar all <foreach collection = "list" item = "userList" index = "index"> en userInfo (userId, username) valores (#{userList.UserID},#{userList.username}) </ foreach> Select 1 de Duale </inserte </inserts </insert.Nota: Cuando el tamaño de la lista es mayor que 500, fallará;
2. Actualizar
(1) El primer método: también use procedimientos almacenados (búsqueda en línea, el blog anterior)
<update id = "batchupdateuser" parametertype = "java.util.arrayList"> <foreach collection = "list" item = "userList" index = "index" open = "begin" close = "; end;" separator = ";"> actualizar UserInfo t <SET> T.UserID = #{userList.userID, jdbctype = varchar}, t.username = #{userList.username, jdbctype = varchar}, </set> donde t.userid = #{userlist.userid, jdbctypee = varchar = Varchar = Varchar> </update>(2) El segundo método: use condiciones para lograr (verificada)
<update id = "updateBatchByListStat" parametertype = "java.util.map"> update la_t_advfinished t1 set t1.list_stat = '07 ', t1.modify_time = systimestamp donde t1.id in (<foreach Collection = "Ids" separator = "item =" Id ">' $ {Id} 'Nota: También puede usar la implementación o condicional OR, similar al SQL eliminado a continuación;
3. Eliminar
Similar a la segunda actualización
<deletete id = "deleteattracciones" parametertype = "java.util.list"> Eliminar de las atracciones <Where> <foreach Collection = "list" index = "index" item = "item" Open = "(" separator = "o" Close = ")"> id =#{item.id} </boreach> </where> </delete>Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.