Prefácio
Quando estamos fazendo o desenvolvimento de serviços de back-end, especialmente quando o Big Data é inserido em lotes, as estruturas ORM comuns (Mybatis, Hibernate, JPA) não podem atender aos requisitos de desempenho do programa. Obviamente, é impossível usarmos o JDBC nativo para operar, para que, embora a eficiência seja alta, a complexidade aumentará.
Considerando de forma abrangente, usamos o JDBCTemplate no Spring e nomeamos o parameterjdbctemplate para executar operações em lote.
Antes da transformação
Antes de iniciarmos a explicação, vamos primeiro olhar como o JPA foi operado em lotes.
Usuário da entidade:
classe pública AppStudent {private integer id; Inteiro privado Classid; nome de string privado; idade inteira privada; // pseudocódigo, construções omitidas e obtenha, ajuste métodos}DynamicQuery Pseudocode:
@RepositoryPublic Class DynamicQueryImpl implementa DynamicQuery {@PersistencEContext PrivateManager em; public entityManager getentityManager () {return em; } // De fato, é apenas para loop e usa o método persistente do entityManager para salvar @Override public <T> void savelist (list <t> resultadolist) {for (int i = 0; i <resultadoList.size (); i ++) {t t = resultadolist.get.get (i); em.persist (t); }}}Após a transformação
JDBCTemplate
Os principais métodos fornecidos pelo JDBCTemplate:
Só precisamos usar @Autowired para injeção na classe JDBCTemplate:
@AUTOWIEDPRIVATE JDBCTEMPLATE JDBCTEMPLATE;
Operação de inserção em lote:
public void batchSave () {list <object []> BatchArgs = new ArrayList <object []> (); Batchargs.add (novo objeto [] {1, "Xiao Ming", 21}); Batchargs.add (novo objeto [] {2, "xiaohong", 22}); Batchargs.add (novo objeto [] {3, "Lucy", 23}); String sql = "Insira no usuário (nome de usuário, senha) valores (?,?)"; jdbctemplate.batchupdate (SQL, Batchargs);}O exposto acima implementa a função de inserção do lote, mas quando existem muitos campos de banco de dados, pode não ser tão bom codificá -lo na forma de um espaço reservado. Aqui, a primavera também fornece simplesjdbctemplate (Spring3.1+ está marcada como desatualizada posteriormente, mas é completamente removida na primavera 4.3. O último pode atender completamente às necessidades) e nomeado mecanismo do modelo de modelo.
ChamadoParameterjdbcTemplate
Eu acredito que os alunos que usaram o Hibernate sabem que ele pode ser usado no HQL? Ou: * Para configurar os parâmetros de consulta externamente. Na estrutura JDBC da primavera, também é fornecida uma maneira de vincular parâmetros SQL, usando parâmetros nomeados.
Só precisamos usar o @Autowired para injeção na classe NomeParameterjdbctemplate:
@AutowiredPrivate chamadoParameterjdbcTemplate denomepParameterjdbctemplate;
Operação de inserção em lote:
public void batchSave () {list <suser> list = new ArrayList <suser> (); // Adicione nova lista de usuários.Add (novo AppStudent (1, "Zhang San", 21)); list.add (novo AppStudent (1, "Li Si", 22)); list.add (novo AppStudent (1, "Wang Ermazi", 23)); // lote para matar sqlparametersource [] beansources = sqlparametersourceutils.createbatch (list.toarray ()); String sql = "inserir em app_student (class_id, nome, idade) valores (: classId ,: nome ,: idade)"; chamadoParameterjdbctemplate.batchupdate (sql, beansources);}Finalmente, usamos o System.CurrentTimemillis () para comparar e imprimir o tempo de execução antes e depois da transformação específica.
long start = System.currenttimemillis (); // Remodelar o código antes e depois e suplementá-lo por longo prazo = system.currenttimemillis (); System.out.println ("Segunda vez:"+(End-Start));Rápido é definitivamente rápido. Quanto à rapidez, ele precisa fazer uma comparação relevante com base no volume de dados e na configuração da máquina.
Código fonte do projeto: https://gitee.com/52itstyle/spring-data-jpa
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.