Prefácio
Mybatis é uma estrutura de persistência de dados muito usada no desenvolvimento da engenharia da web. Através dessa estrutura, podemos adicionar, excluir, modificar e pesquisar facilmente no banco de dados. Quando uma conexão com o banco de dados comete transações, ele consome muitos recursos. Se os dados mais atualizados precisarem ser inseridos e apenas um dados for enviado para cada transação, causará um enorme desperdício de recursos do banco de dados, resultando em um declínio significativo no desempenho do banco de dados e no desempenho do sistema.
Em relação à inserção em lote dos Mybatis, a maioria dos exemplos na Internet é sobre bancos de dados MySQL, e há menos exemplos sobre bancos de dados Oracle. Este artigo apresentará a você o conteúdo relevante sobre a inserção, atualização e exclusão do Oracle+Mybatis em lote. Não vou dizer muito abaixo, vamos dar uma olhada na introdução detalhada juntos.
1. Insira
(1) O primeiro método: use a tag <foreach> para gerar dados virtuais através da Union All para obter a inserção em lote (verificada)
<insert id = "insertbatchlatcontactrecord" parametertype = "java.util.map"> <selectKey ResultType = "java.lang.long" keyProperty = "dto.id" order = "antes"> selecione seq_la_t_contact_record.nextval " id, contrat_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, valides_state, sís_by, isquery)) Selecione) seq_LA_T_CONTACT_RECORD.NEXTVAL,A.* from( <foreach collection="list" item="dto" index="index" separator="UNION ALL"> select #{dto.contractId,jdbcType=VARCHAR} ,#{dto.contacterAddName,jdbcType=VARCHAR} ,#{dto.contactaddtype, jdbctype = varchar},#{dto.contactaddphone, jdbctype = varchar},#{dto.contactaddhomeAddress, jdbctype = varchar},#{dto.CONTDDDWORT, ,#{dto.contactAddWork,jdbcType=VARCHAR} ,#{dto.contactAddWorkAddress,jdbcType=VARCHAR} ,#{dto.createBy,jdbcType=DECIMAL} ,systimestamp ,#{dto.modifyBy,jdbcType=DECIMAL} ,#{dto.modifytime, jdbctype = timestamp}, '1',#{dto.syssource, jdbctype = varchar},#{dto.isQuery, jdbctype = varchar} de dual </asoweach>) a </insert>Nota: O parâmetro de entrada deve ser uma coleção de listas e não há valores na instrução SQL;
(2) O segundo método: use procedimentos armazenados para realizar a inserção em lote (verificada)
<inserir id = "insertPlanRepayMentoTheBatch" parameterType = "java.util.list"> BEGIN <foreach collection = "list" item = "item" index = "index"> inserir em lb_t_plan_repayment_otherfee (ida, válido, termo, contrat_id, pay_order valores (seq_lb_t_plan_repay_otherfee.nextVal,#{item.key, jdbctype = varchar},#{item.value, jdbctype = varchar},#{item.term, jdbcTyBe = decimal},#{item.ContratId, {item.term, jdbctype = decimal},#{item. ,#{item.PayOrder, jdbcType = decimal},#{item.feename, jdbctype = varchar},#{item.intoid, jdbctype = varchar}); </ foreach> final; </insert>Nota: Os parâmetros recebidos ainda são coleções de listas e existem valores no SQL, que estão essencialmente usando procedimentos armazenados para implementar a inserção em lote;
(3) O terceiro método: use instruções SQL especiais (pesquisando on -line, esperando para ser verificado)
Blog de referência: http://blog.csdn.net/w_y_t_/article/details/51416201
A seguinte instrução SQL pode implementar a inserção em lote de uma declaração!
Insira tudo no userInfo (userID, nome de usuário) valores ('1001', 'Tom') nos valores do userInfo (UserID, Name de usuário) ('1002', 'Black') em UserInfo (UserID, UserName) ('1003', 'Jetty') em Valores de UserInfo (Username) ('1003', '' '' '' '' '', '' '' '' '' '' '1003' '' '' '' '' '' '' '1003' '', 'Jetty') em UserInfo (UserId, Username) ('1003' '' '' '' '' '' '1003', Jetty ') em Valores de UserInfo (Username) (' 1004 '' ',' 1003 ',' Jetty ') em UserInfo (Username) (' 1003 '', 'Jetty') em UserInfo (Username); <insert id = "batchinsertUser" parameterType = "java.util.arraylist"> insira todos os <foreach collection = "list" item = "userList" index = "index"> em userInfo (userId, userrid) valores (#{userList.UserId}, {{UserId.ername))Nota: Quando o tamanho da lista for maior que 500, ela falhará;
2. Atualização
(1) O primeiro método: também use procedimentos armazenados (pesquisando on -line, o blog acima)
<update id = "batchupdateUser" parameterType = "java.util.arraylist"> <foreach collection = "list" item = "userList" index = "index" Open = "BEGIN" Close = "; end;" separador = ";"> Atualize o userInfo t <Set> t.UserId = #{userList.userId, jdbctype = varchar}, t.username = #{userList.UserIname, jdbctype = varchar}, </setB> where t.UserID = #ArtList. </atualização>(2) O Segundo Método: Use Condições para alcançar (verificado)
<update id = "updateBatchByListStat" parameterType = "java.util.map"> atualize la_t_advfinished t1 set t1.list_stat = '07 ', t1.modify_time = systimestamp onde o t1.id em (<forach coleta = "ids" se separa "", " Item = "Id"> '$ {id}' </foreach>) </pubray>Nota: Você também pode usar a implementação condicional, semelhante ao SQL excluído abaixo;
3. Exclua
Semelhante à segunda atualização
<Delete id = "DeLeTeattrações" ParameterType = "java.util.list"> excluir das atrações <where> <foreach collection = "list" index = "index" item = "item" Open = "(" separador = "ou" Close = ")"> id =##{ite.id.id} </foreach> </where>Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.