MyBatis es un proyecto de código abierto de Apache. En 2010, este proyecto se trasladó de Apache Software Foundation a Google Code y pasó a llamarse MyBatis. Lo siguiente es introducir el mapeo avanzado MyBatis, SQL dinámico y obtener contenido de clave primaria de incremento automático. Para más detalles, consulte este artículo.
1. SQL dinámico
Creo que todos siempre encontrarán un problema cuando usen mybatis para operar la base de datos. Si ahora tenemos una lista de autor de la lista sobre el autor, necesitamos consultar la información del blog del autor correspondiente en la base de datos basada en la información del autor existente en la Lista de Author. Entonces, la forma más fácil de pensar es atravesar la lista de autor y obtener la información correspondiente para consultar la base de datos.
for (int i = 0; i <autorlist.size (); i ++) {... // Código de base de datos de consulta // SELECT * De Blog Where Author =#{Author, JDBCType = Varchar}}Piénselo, si la longitud de AuthorList es n, entonces necesitamos consultar la base de datos n veces. Si usamos este método, la sobrecarga del programa no solo se trata de consultar, sino también de sacar la instancia de conexión del grupo de conexión de la base de datos, establecer una conexión de base de datos y devolver la instancia de la base de datos al grupo de conexión de la base de datos. Suponga que estas tres acciones toman un total de 0.001 segundos. Luego, si usa métodos de recorrido para consultar, tomará 0.001n segundos más. Si necesita consultar 1,000 veces, será 1 segundo más. Esto es insoportable para los programadores, porque esto es solo una consulta circular y no cuenta como otro código de negocio.
Entonces, ¿hay una mejor manera? La respuesta es sí, una de las cuales es SQL dinámico:
Primero cargue el código:
<Select id = "DynamicForEachTest" resultType = "com.blog.blog" parametertype = "java.util.list"> select * del blog donde autor en <foreach colección = "list" index = "index" item = "item" open = "(" separator = "," cerrar = ")">#{item} </boreach> </select>TEM representa el alias cuando se itera cada elemento en el conjunto.
El índice especifica un nombre para representar la posición a la que se alcanza cada iteración durante el proceso de iteración.
Abrir significa dónde comienza la declaración,
El separador indica qué símbolo se usa como separador entre cada iteración.
Close indica lo que termina para que el valor de retorno pueda aceptarse utilizando la lista <bolg>.
Sin embargo, la declaración foreach en SQL dinámico utiliza lo más real en las declaraciones de inserción y generalmente se usa en cláusulas.
2. Mapeo avanzado
Cuando se usa myBatis, la clase de entidad resultante = com.blog.author generalmente se usa para aceptar resultados de consulta.
O use resultType = java.util.map para devolver el nombre de la columna de la base de datos como clave y el valor de registro como valor.
Pero esta vez, se necesita resultados, lo que permite una combinación gratuita de valores de retorno para manejar consultas más complejas.
O simplemente suba el código primero:
SQL:
<select id = "getBlogs" resultMap = "blogs" parametertype = "map"> Seleccione A.Authorid, A.uthorname, B.Blogid, B.BlognameFrom Autor A Left A Blog B en a. autorid = b. autorid donde a. AuthorId = #{AuthorId, JDBCType = Integer} </select>Configuración de MyBatis:
<resultMap id = "Blogs" type = "com.bloh.blog"> <id propiedad = "autorid" column = "autorid"> <result Property = "authorname" column = "AHORTORNAME"> <Propiedad de colección = "PostList" OfType = "com.bolg.post"> <Id Property = "Blogid" columna = "Blogid"/> <Result Property = "BLOGNAME" columna "columna" columna "columna". Property = "Blogname"/> </resultMap>
Clase de entidad de blog
Public class Bolg {private entero autorid; private string fortorName; private list <stost> postsList; // setter getter}Clase de entidad post
Public Class Post {private entero blogID; private string blogname; // setter getter}Esto le permite aceptar una consulta compleja con una entidad.
La siguiente es la función de cada atributo:
No entraré en detalles sobre otras propiedades y configuraciones de consultas ordinarias mybatis.
ResultMap se usa en lugar de resultType, indicando el formato devuelto por el resultado de la consulta
El ID en ResultMap tiene dos funciones principales:
Índices similares para mejorar el rendimiento de la consulta
Distinguir diferentes resultados
Por lo tanto, es mejor no omitir la identificación. Si no hay una clave primaria, use un campo que pueda distinguir de manera única los registros.
El resultado es el nombre de la variable definido en la clase Entity, y la columna es el nombre de la columna de la base de datos
La colección es una colección de listas, mapas, etc.
PostList es el nombre de la variable de lista definido en la clase de entidad del blog
De oftype es la clase de entidad del objeto en la lista de objetos.
3. Obtenga la identificación de autoingresión:
Si existe la siguiente situación, después de insertar el registro de la base de datos, desea obtener la clave principal del registro de inserción y utilizar el código comercial posterior
Entonces MyBatis también proporciona el soporte correspondiente para esta situación (la inserción por lotes no es compatible):
MySQL es la identificación de autosuficiencia de sonido original; Suponiendo que el nombre de campo de la clave primaria de autoingresión es ID
<insert id = "insertar" useGeneratedKeys = "true" keyproperty = "id" parametertype = "user"> insertar en <incluido refid = "table_name" /> (nombre, edad) valores ( #{name}, #{age}) < /insert>Hay dos atributos más que la inserción ordinaria useGeneratedKeys = "True", lo que significa que devuelve la ID de autoincremento cuando está habilitado.
keyProperty = "id" significa el nombre de la clave primaria de retorno.
Luego puede usar las siguientes declaraciones para recibir en el código de negocio:
Suponga que la clase de entidad es usuario
User UserNew = usermapper.insert (usuario);
usermew.getid // es la identificación de incremento automático después de la inserción
De hecho, la clave primaria de incremento automático de MySQL se puede obtener mediante Select Last_insert_id ();
Entonces, hay otra forma de escribirlo:
<inserto id = "insertar" parametertype = "user"> <selectKey denteType = "int" orden = "después" keyproperty = "id"> seleccione last_insert_id () como id </sectekey> insertar en el nombre, edad values ( #{name}, #{edad}) </shant>Es exactamente lo opuesto al método de MySQL para obtener claves primarias. MySQL es la tabla que asigna el valor de crecimiento propio después de la ejecución de inserción, mientras que Oracle obtiene el valor de crecimiento de sí mismo antes de realizar Insert SQL. Antes de ejecutar Insertar SQL, se debe especificar un valor de clave principal al registro que se insertará. Por lo tanto, debe obtener la secuencia de crecimiento propio en "antes", y luego inyectarla en el mapa de parámetros mediante select Key. Asumir el crecimiento propio o la identificación
<insert id = "insertar" useGeneratedKeys = "true" keyproperty = "id" parametertype = "xxxx"> <selectKey dualType = "int" orden = "antes" keyproperty = "id"> seleccione SEQ_TABLE
La identificación aquí es la ID de incremento automática obtenida por selección de selección.
El método de recepción es el mismo que MySQL. Al obtener la clave primaria de incremento automático, es mejor usar la recepción de entidad.
Lo anterior es el mapeo avanzado MyBatis, SQL dinámico y la obtención de claves primarias autoaccionadas que se le presentan. 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!