Prefacio
Cuando estamos haciendo desarrollo de servicios de back-end, especialmente cuando Big Data se inserta en lotes, los marcos ORM ordinarios (MyBatis, Hibernate, JPA) no pueden cumplir con los requisitos de rendimiento del programa. Por supuesto, es imposible para nosotros usar JDBC nativo para operar, de modo que aunque la eficiencia sea alta, la complejidad aumentará.
Teniendo en cuenta integralmente, utilizamos JDBCTemplate en Spring y nombrados ParameterJDBCTemplate para realizar operaciones por lotes.
Antes de la transformación
Antes de comenzar la explicación, veamos primero cómo se operaba JPA en lotes.
Usuario de la entidad:
Public Class AppStudent {private entero ID; Integer Classid privado; nombre de cadena privada; edad de entero privado; // pseudocódigo, construcciones omitidas y obtener, establecer métodos}Pseudocódigo DynamicQuery:
@RepositoryPublic Class DynamicQueryImpl implementa DynamicQuery {@PersistenceContext EntityManager EM; Public EntityManager getEntityManager () {return EM; } // De hecho, es solo para bucle y usar el método Persist de EntityManager para salvar @Override public <T> void savelist (list <t> resultList) {for (int i = 0; i <resultlist.size (); i ++) {t t = resultList.get (i); Em.Persist (t); }}}Después de la transformación
JDBCTemplate
Los principales métodos proporcionados por JDBCTemplate:
Solo necesitamos usar @aUtowired para inyección en la clase JDBCTMAPLE:
@AUtowiredPrivate jdbctemplate jdbctemplate;
Operación de inserción por lotes:
public void batchSave () {list <object []> batchargs = new ArrayList <Object []> (); batchargs.add (nuevo objeto [] {1, "Xiao Ming", 21}); batchargs.add (nuevo objeto [] {2, "xiaohong", 22}); batchargs.add (nuevo objeto [] {3, "Lucy", 23}); String sql = "Insertar en los valores del usuario (nombre de usuario, contraseña) (?,?)"; jdbctemplate.batchupdate (SQL, Batchargs);}Lo anterior básicamente implementa la función de inserción por lotes, pero cuando hay muchos campos de bases de datos, puede no ser tan bueno codificarla en forma de marcador de posición. Aquí, Spring también proporciona SimpleJDBCTemplate (Spring3.1+ está marcado como anticuado más adelante, pero se elimina por completo en la primavera 4.3. Este último puede satisfacer completamente las necesidades) y el motor de plantilla de plantilla de plantilla de ParameterJDBCTDBCTDBCTDB.
NamedParameterJDBCTemplate
Creo que los estudiantes que han usado Hibernate saben que se puede usar en HQL. O: * Para configurar los parámetros de consulta externamente. En el marco Spring JDBC, también se proporciona una forma de unir los parámetros SQL, utilizando parámetros con nombre.
Solo necesitamos usar @aUtowired para inyección en la clase de CandarameterJDBCTEMPLATE:
@AUtowiredPrivate namedParameterJDBCTemplate namedParameterJDBCTemplate;
Operación de inserción por lotes:
public void batchSave () {list <serem> list = new ArrayList <Serer> (); // Agregar nueva lista de usuarios.Add (nuevo AppStudent (1, "Zhang San", 21)); list.add (nuevo AppStudent (1, "Li Si", 22)); list.add (nuevo AppStudent (1, "Wang Ermazi", 23)); // Batch to Array sqlParametersource [] beansources = sqlparametersourceutils.createBatch (list.toarray ()); String sql = "insertar en app_student (class_id, nombre, edad) valores (: classid ,: name ,: age)"; namedparameterJdbctemplate.batchupdate (sql, beansources);}Finalmente, usamos System.CurrentTimemillis () para comparar e imprimir el tiempo de ejecución antes y después de la transformación específica.
long start = system.currentTimemillis (); // remodelar el código antes y después, y compleméntelo usted mismo Long End = System.CurrentTimemillis (); System.out.println ("Second Time:"+(End-start));El ayuno es definitivamente rápido. En cuanto a lo rápido que es, debe hacer una comparación relevante basada en el volumen de datos y la configuración de la máquina.
Código fuente del proyecto: https://gitee.com/52itstyle/spring-data-jpa
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.