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.
La arquitectura funcional de MyBatis se divide en tres capas (la imagen se toma prestada de la enciclopedia de Baidu):
1) Capa de interfaz API: proporciona API de interfaz para uso externo, a través de la cual los desarrolladores manipulan las bases de datos. Una vez que la capa de interfaz recibe la solicitud de llamadas, llamará a la capa de procesamiento de datos para completar el procesamiento de datos específico.
2) Capa de procesamiento de datos: responsable de la búsqueda SQL específica, el análisis SQL, la ejecución de SQL y el procesamiento de mapeo de resultados de ejecución, etc. Su objetivo principal es completar una operación de base de datos basada en la solicitud de la llamada.
3) Capa de soporte básica: responsable del soporte funcional más básico, incluida la gestión de la conexión, la gestión de transacciones, la carga de configuración y el procesamiento de caché. Todas estas son cosas comunes, extrayendo como los componentes más básicos. Proporciona el soporte más básico para la capa superior de la capa de procesamiento de datos.
Al seleccionar la asignación en MyBatis, el tipo de retorno se puede usar con Resulttype o ResultMap. Resulttype representa directamente el tipo de retorno, mientras que el resultado de resultados es una referencia al resultado de resultados externo, pero el resultado de resultados y el resultado de resultados no pueden existir al mismo tiempo. Cuando MyBatis consulta la asignación, de hecho, cada consulta de atributos se coloca en un mapa correspondiente, donde la clave es el nombre del atributo y el valor es su valor correspondiente. Cuando el atributo de tipo de retorno proporcionado es resultante, MyBatis eliminará los pares de valores clave en el mapa y los asignará a los atributos correspondientes del objeto especificado por resultType. Entonces, de hecho, el tipo de retorno de cada mapa de consulta de MyBatis es un resultado de resultados. Sin embargo, cuando el atributo de tipo de retorno que proporcionamos es resultType, MyBatis asigna automáticamente el valor correspondiente a los atributos del objeto especificado por resultType. Cuando el tipo de retorno que proporcionamos es ResultMap, porque el mapa no puede representar bien el modelo de dominio, necesitamos convertirlo aún más en el objeto correspondiente nosotros mismos, lo que a menudo es muy útil en consultas complejas.
Hay un archivo de blog.java
import java.util.list; public class Blog {private int id; private string title; private string content; private string propietario; private list <nment> comentarios; public int getId () {return id;} public void setid (int id) {this.id = id;} public string gettitle () {title de return;} public {return content;} public void setContent (string content) {this.content = content;} public String getowner () {return propietario;} public void setOwner (string propietario) {this.owner = propietario;} public List <N comment> getComments () {devuelve comentarios;} setcomments de setComunicia publicitaria (Lista <comentario> comentarios) {this.comments =@@anevarp (@ogriming {return "---------------- 博客 --------------------------/N ID:" + ID + "/n Título:" + Título + "/n Contenido:" + Content + "/N Owner:" + Owner;}}La tabla de base de datos correspondiente contiene atributos ID, título, contenido y propietario. Cuando realizamos el siguiente mapeo de consultas
<typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <!-Archivo de configuración de myBatis mybatis_config.xml-> <select id = "selectblog" parametertype = "int" denttype = "blog"> select * from t_blog where id = #{it} </select> <! BlogMapper.xml->MyBatis creará automáticamente un objeto ResultMap y luego encapsulará el par de valor clave en función del nombre del atributo encontrado. Luego, verá que el tipo de retorno es un objeto de blog, y luego elimine el par de valores clave correspondiente al objeto de blog del resultado de resultados y lo asigne.
También es muy útil cuando el tipo de retorno es directamente un resultado de resultados, que se usa principalmente para consultas conjuntas complejas, porque no es necesario realizar consultas simples. Primero veamos una consulta simple con un tipo de resultado de tipo de retorno y luego veamos el uso de consultas complejas.
Cómo escribir una consulta simple
<resultMap type = "Blog" id = "Blogresult"> <id columna = "id" propiedad = "id"/> <resultado columna = "Title" Property = "Title"/> <resultado columna = "Content" Property = "Content"/> <Result Column = "Owners" Property = "propietario"/> <Resultando columna = "Propiedad" Propiedad = "Propietario"/> <Resultado = "Propiedad" Propiedad = "Propietario"/>> <Result Columna Columny "Resultado" Resultado " Propiedad = "propietario"/> <</resultMap> <select id = "selectblog" parametertype = "int" resultmap = "blogresult"> select * de t_blog donde id = #{id} </select>El valor de ResultMap en el mapa de selección es la ID de un resultado de resultados externo, lo que indica a qué resultado se asigna. El atributo de tipo de la map del resultado externo indica qué tipo es el resultado del resultado de resultados. Aquí está el tipo de blog, por lo que MyBatis lo sacará como un objeto de blog. La ID del nodo infantil del nodo ResultMap se usa para identificar la ID del objeto, mientras que el nodo del niño de resultado se usa para identificar algunas propiedades simples. La propiedad de la columna representa los atributos consultados desde la base de datos, y la propiedad representa qué propiedad se asigna el valor correspondiente de la propiedad consultada al objeto Entity. Así es como escribir ResultMap para una consulta simple. A continuación, echemos un vistazo a una consulta más complicada.
Hay una clase de comentarios, que tiene una referencia de blog, que indica para qué blog es. Al consultar comentarios, también debemos encontrar el blog correspondiente y asignarlo a su atributo de blog.
import java.util.date; public class Comment {private int id; private string content; private date commentDate = new date (); public blog public; public int getId () {return id;} public void setid (int id) {this.id = id;} public String getContent () {contenido de return n;} public {return commentDate;} public void setCommentDate (date commentDate) {this.commentDate = commentDate;} blog public getBlog () {return Blog;} public void setBlog (blog blog) {this.blog = blog;} public String ToString () {Blog return + "/n --------------------- 评论 ---------------------/n Id:" "/n commentDate:" + commentDate;}}Está escrito así
< id = "selectblog" parametertype = "int" denttype = "blog"> select * de t_comment donde id = #{id} </select> <select id = "selectblog" parametertype = "int" resultype = "blog"> select * from t_blog where id = #{id} </select>La situación de acceso es así. Primero, solicita el mapa Seleccionar con la ID de SelectComment, y luego obtiene un objeto ResultMap con la ID de CommentResult. Podemos ver que el tipo de retorno del mapa de resultados correspondiente es un objeto de comentarios, que solo tiene un nodo de asociación, y no hay ID y nodo infantil de resultados correspondiente a la consulta simple mencionada anteriormente, pero aún asignará la identificación correspondiente y otros atributos al objeto de comentarios. Esto es lo que MyB mencionó anteriormente. ATIS tiene una función de encapsulación automática. Mientras proporcione un tipo de retorno, MyBatis utilizará los resultados de la consulta para encapsular el objeto correspondiente de acuerdo con su propio juicio. Por lo tanto, en la consulta simple anterior, si no indica claramente qué campo corresponde a ID y qué campo corresponde al título en el resultado de resultados, MyBatis también lo encapsulará de acuerdo con su propio juicio. El juicio de MyBatis es comparar el campo de la consulta o su alias correspondiente con los atributos del objeto de retorno. Si coincide y el tipo también coincide, MyBatis lo asignará. Un atributo de blog está asociado en el Mapas de resultados correspondientes anteriores, y su tipo Java correspondiente es Blog. En el método de escritura anterior, el objeto asociado se asocia a través de subconsules y, por supuesto, también se puede asociar directamente a través de la consulta de asociación. En el nodo infantil de asociación anterior, el atributo de propiedad indica qué propiedad asociada es el tipo de retorno de resultados de resultados. Para el ejemplo anterior, el atributo de blog administrado por comentario; Seleccionar indica qué mapa seleccionar para asignar el atributo asociado correspondiente, es decir, solicitará un mapa de selección con el valor correspondiente a seleccionar para consultar el objeto de atributo asociado; La columna indica el par de valor clave correspondiente al resultado de resultados con ID CommentResult. Este par de valor clave se utilizará como un parámetro para la subconsulta del objeto asociado, es decir, el valor de la consulta de atributos del blog en selectComment se pasa como un parámetro a la subconsulta del blog de objeto asociado a la subconsulta del blog de objetos asociados; Javatype indica qué tipo del objeto asociado actual hay en Java.
Lo anterior presenta una consulta de relación uno a uno o de uno a muchos con una parte en el caso de uno a muchos. En aplicaciones reales, hay otra aplicación que se usa con más frecuencia. Es necesario averiguar las partes más correspondientes a través de una parte. Al eliminar las fiestas más, una parte también debe estar asociada con una parte. Es decir, en el ejemplo anterior, al sacar el objeto del blog, se extraen todos los comentarios correspondientes. Al sacar el comentario, aún necesita sacar el blog correspondiente. Esto se saca a través de una solicitud en Java. El método de escritura es el siguiente:
< javaType="Blog" column="blog" select="selectBlog"/></resultMap><select id="selectBlog" parameterType="int" resultMap="BlogResult">select * from t_blog where id = #{id}</select><!-- Find Comment by Blog --><select id="selectCommentsByBlog" parameterType="int" resultMap="CommentResult">select * Desde t_comment donde blog = #{BlogID} </select>La entrada de la solicitud anterior es un mapa de selección con ID SelectBlog, y el resultado de retorno es un resultado de resultados con ID blogresult. El tipo de ID blogresult es el blog, que especifica los atributos y campos de ID. Especificar ID tendrá un gran efecto en la construcción interna de mybatis. Está asociado con un objeto de comentarios. Debido a que un blog puede tener muchos comentarios, que son una colección, por lo que está asignado con una colección. La selección aún indica qué subconsulta se realiza para consultar los comentarios correspondientes. columna significa qué valor de campo encontrado anteriormente se pasa a la subconsulta como parámetro. de ttype también representa el tipo de retorno. El tipo de retorno aquí es el tipo dentro de la colección. La razón por la cual se usa de tipo en lugar de tipo es que se usa dentro de MyBatis para distinguirlo de la asociación de la asociación.
Código de prueba:
@TestPublic void selectcommentsByBlogTest () {sqlsession session = util.getSqlSessionFactory (). OpenSession (); commentMapper CommentMapper = session.getMapper (commentMapper.class); list <neds> comments = commentMapper.SelectCommentsByBlog (6); para (comentario comentario: comentarios) System.out.println (comentario); session.close ();}/*** consulta un solo registro*/@testPublic void testSelectone () {sqlsession session = util.getSqlSessionFactory (). OpenSession (); BlogMapper BlogMapper = Session.getMapper (blogMapper.Class); Blog Blog = Blog = Blog = Blog = BlogMapper.Selectblog (6); List <Sment> Comments = Blog.getComments (); if (Comments! = Null) {System.out.println ("-------------- Tamaño de los comentarios ------------" + comentariosLo anterior es una breve descripción general de ResultMap en MyBatis presentada por el editor. 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!