Introducción a mybatis
MyBatis es un excelente marco de capa de persistencia que admite consultas SQL simples, procedimientos almacenados y mapeo avanzado. MyBatis elimina la configuración manual de casi todos los códigos y parámetros JDBC y la encapsulación de búsqueda del conjunto de resultados. MyBatis puede usar XML o anotaciones simples para la configuración y mapeo original, mapeo de interfaces y Pojos de Java (objetos Java Old Old) en los registros en la base de datos.
1. Mybiats foreach etiqueta
Foreach se usa principalmente en la construcción en condiciones, puede iterar sobre una colección en declaraciones SQL. Los atributos del elemento foreach incluyen principalmente elemento, índice, colección, abierto, separador y cierre. El elemento representa el alias cuando se itera cada elemento en la colección. El índice especifica un nombre para representar la posición a la que se alcanza cada iteración durante el proceso de iteración. Open representa lo que comienza con la declaración, el separador representa qué símbolos se usan como separadores entre cada iteración, y Close representa lo que termina. Lo más crítico y propenso a los errores al usar ForEach es el atributo de colección. Este atributo debe especificarse, pero en diferentes casos, el valor del atributo es diferente. Hay tres situaciones principales:
Si el pasado es un parámetro único y el tipo de parámetro es una lista, el valor del atributo de colección es una lista
Si el pasado es un parámetro único y el tipo de parámetro es una matriz, el valor de la propiedad de la colección es una matriz
Si hay múltiples parámetros pasados, necesitamos encapsularlos en un mapa
El uso específico es el siguiente:
<insert id = "insertbatch" parametertype = "list"> insertar en tstudent (name, edad) <foreach Collection = "list" item = "item" index = "index" open = "(" close = ")" Separator = "Union All"> Seleccione #{item.name} como A, #{}.age} como dual </foreach> </sert>2. MyBatis Executype.Batch
Hay 3 tipos de ejecutivos construidos en mybatis. El valor predeterminado es simple. En este modo, crea una nueva declaración de preprocesamiento para la ejecución de cada declaración y envía SQL en una sola línea; mientras que el modo por lotes reutiliza las declaraciones preprocesadas y ejecuta todas las declaraciones de actualización en lotes. Obviamente, el modo por lotes tiene sus propios problemas. Por ejemplo, cuando una operación de inserción, no hay forma de obtener la identificación autoincrementada antes de que se presente la transacción, que no cumple con los requisitos comerciales en una determinada situación.
El uso específico es el siguiente:
*Método One Spring+MyBatis
// Get sqlsession // inyecte el sqlsessionTemplate original de Spring@AutowiredPrivate SQLSessionTemplate SQLSessionTemplate; // Obtenga una nueva sesión con Batch, enviándolo automáticamente a False // Si la Presentación automática se establece en True, el número de presentaciones no puede controlarse y el último envío unificado se cambia, lo que puede cambiar la memoria de la memoria. sqlSessionTemplate.getSqlSessionFactory (). OpenSession (ejecutype.batch, falso); // get mApperfoomapper = session.getMapper (foomapPer.class); int size = 10000; intente {para (int i = 0; i <size; i ++) {foo = new = new Foo (); foo.setName (String.ValueOf (System.CurrentTimemillis ())); foomapper.insert (foo); if (i % 1000 == 0 || i == size - 1) {// Manually cada 1000, session.commit () no se puede volver a enrollar; (Excepción e) {// No se pueden retirar los datos enviadosMétodo 2:
Combinado con el alias General Mapper SQL, es mejor tener el nombre del paquete + nombre de clase
public void InsertBatch (map <string, object> parammap, list <serem> list) lanza una excepción {// Obtener una nueva sesión con Batch, enviarla automáticamente a False // Si el envío automático se establece en verdadero, el número de envíos no se puede controlar y la última presentación unificada se cambia a la última presentación unificada, que puede causar la sesión de sqlsession de exceso de flujo de memoria = sqlsessionTemplate.getSqlSessionFactory (). OpenSession (Executortype.batch, False); intente {if (null! = list || list.size ()> 0) {int lsize = list.size (); for (int i = 0, n = list.size (); i <n; i ++) {usuario user = = list.get (i); user.setIndate ((string) parammap.get ("indate")); user.setDatadate (((string) parammap.get ("datadate")); // atribución de datos Time // session.insert ("com.xx.mapper.usermapper.insert", user); // session.update ("com.xx.mapper.usermapper.updateByPrimaryKeySelective", _ entity); session.insert ("nombre de paquete + nombre de clase", usuario); if ((i> 0 && i % == 0) | a 1) i ==) {// Enviar manualmente cada 1000, session.commit () no se puede volver a reiniciar después de confirmar; // limpia el caché para evitar desbordamiento session.clearCache ();}}}} catch (excepción e) {// no se pueden hacer los datos enviadosLo anterior son dos formas de inserción por lotes en MyBatis presentada por el editor (inserción eficiente). Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!