Introdução a Mybatis
Mybatis é uma excelente estrutura de camada de persistência que suporta consultas SQL simples, procedimentos armazenados e mapeamento avançado. O MYBATIS elimina as configurações manuais de quase todo o código e parâmetros JDBC e o encapsulamento de pesquisa do conjunto de resultados. O Mybatis pode usar XML simples ou anotações para configuração e mapeamento original, interfaces de mapeamento e POJOS de Java (objetos Java antigos simples) para registros no banco de dados.
1. Mybiats foreach tag
A foreach é usada principalmente na construção em condições, pode iterar sobre uma coleção em declarações SQL. Os atributos do elemento foreach incluem principalmente itens, índices, coleta, abertura, separador e fechamento. O item representa o alias quando cada elemento da coleção é iterado. O índice especifica um nome para representar a posição na qual cada iteração é atingida durante o processo de iteração. O Open representa o que começa com a declaração, o separador representa quais símbolos são usados como separadores entre cada iteração e o fechamento representa o que termina. A coisa mais crítica e mais propensa a erros ao usar o foreach é o atributo de coleção. Esse atributo deve ser especificado, mas em diferentes casos, o valor do atributo é diferente. Existem três situações principais:
Se o passado é um único parâmetro e o tipo de parâmetro é uma lista, o valor do atributo de coleção é a lista
Se o passado é um único parâmetro e o tipo de parâmetro é uma matriz, o valor da propriedade da coleção é
Se houver vários parâmetros passados, precisamos encapsulá -los em um mapa
O uso específico é o seguinte:
<insert id = "insertbatch" parametertype = "list"> inserir no tstudent (nome, idade) <foreach collection = "list" item = "item" index = "index" open = "(" close = ")" separador = "Union all"> selecione #{item.name} como a, #{{ite.2. Mybatis executyType.batch
Existem 3 tipos de executivos construídos em mybatis. O padrão é simples. Nesse modo, ele cria uma nova declaração de pré -processamento para a execução de cada instrução e envia o SQL em uma única linha; Enquanto o modo em lote reutiliza declarações pré -processadas e executa todas as instruções de atualização em lotes. Obviamente, o modo de lote tem seus próprios problemas. Por exemplo, quando uma operação de inserção, não há como obter a identificação auto-incrementada antes que a transação seja enviada, o que não atende aos requisitos de negócios em uma determinada situação.
O uso específico é o seguinte:
*Método uma mola+mybatis
//Get sqlsession//Inject the original sqlSessionTemplate from spring@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;// Get a new session with BATCH, automatically submitting it to false// If the automatic submission is set to true, the number of submissions cannot be controlled and the last unified submission is changed, which may cause memory overflow SqlSession session = sqlSessionTemplate.getSqlSessionFactory (). OpenSession (ExecutOngype.batch, false); // Get mapperFoomApper = session.getMapper (FOOMPPER.CLASS); int size = 10000; tente {para (int i = 0; i <size; i ++) {foo foo = novo Foo (); foo.setName (string.valueof (system.currenttimemillis ())); foomapper.insert (foo); if (i % 1000 == 0 || i == size - 1) {// limpar manualmente o cache para prevenir cada 1000, session.Commit () não pode ser revertido após o comet; {// Nenhum dado enviado pode ser revertido session.rollback ();} finalmente {session.close ();} spring+mybatisMétodo 2:
Combinado com o alias geral do mapeador SQL, é melhor ter o nome do pacote + nome de classe
public void insertBatch (map <string, objeto> parammap, list <suser> list) lança a exceção {// Obtenha uma nova sessão com o lote, enviando -o automaticamente para false // se o envio automático for definido como true, o número de submissões não pode ser controlado e o último envio unificado é alterado para o último submissão unificada, que pode causar o transbordamento de overflow. sqlSessionTemplate.getSqlSessionFactory (). OpenSession (ExecutOnType.batch, false); tente {if (null! = list || list.size ()> 0) {int lsize = list.size (); para (int i = 0, n = list.size (); i <n; i ++); list.get (i); user.setIndate ((String) parammap.get ("indate")); user.setDatAtate ((string) parammap.get ("datadate")); // atribuição de dados time // session.insert ("com.xx.mapper.userMapper.insert", usuário); // session.update ("com.xx.mapper.usermapper.updatebyPrimaryKeySelective", _ entidade); session.insert ("Nome da classe + classe"); if (i> 0 && Envie cada 1000, session.Commit () não pode ser revertido após o comprometimento; // Limpe o cache para impedir a sessão de transbordamento.ClearCache ();}}}} Catch (Exceção e) {// Nenhum dados enviados pode ser revertido de volta à sessão.Rollback (); E.PrintStack ();} finalmente {.close ();O exposto acima são duas maneiras de inserção em lote em Mybatis apresentada a você pelo editor (inserção eficiente). Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!