1. Descripción general
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 ResultMap. Sin embargo, cuando el atributo de tipo de retorno proporcionado es resultType, MyBatis asigna automáticamente el valor correspondiente a los atributos del objeto especificado por resultType.
② Cuando el tipo de retorno proporcionado es ResultMap, porque el mapa no puede representar bien el modelo de dominio, necesita convertirlo aún más en el objeto correspondiente en sí, lo que a menudo es muy útil en consultas complejas.
2. Resultstype
Blog.Javapublic Class Blog {private int id; private String Title; private String Content; Private String propietario; Lista privada <Comment> Comentarios;}Los atributos de la tabla de la base de datos correspondiente almacena, el título, el contenido y el propietario.
<typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <select id = "selectblog" parametertype = "int" resulttype = "blog"> Seleccionar * de t_blog Where id = #{id} </select>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.
3. ResultMap
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.
① escribiendo 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.
② Consulta de complejo
Hay una clase de comentarios, que tiene una referencia de blog, que indica para qué blog es. Al consultar el comentario, el blog correspondiente también debe ser encontrado y asignado a su atributo de blog.
Comentario de clase pública {private int id; private String Content; private Date CommentDate = new Date (); blog de blog privado;} <!-de commentMapper.xml file-> <resultmap type = "comment" id = "commentResult"> <asociación propiedad = "blog" select = "selectblog" columna = "Blog" Javatype = "Blog"/> </resultMap> <Select Select COMMENT resultMap = "CommentResult"> Select * de t_comment Where id = #{id} </select> <select id = "selectblog" parametertype = "int" resultype = "blog"> select * de t_blog where id = #{id} </select>Primero, solicite el mapa Seleccionar con ID como selectComment y luego obtenga un objeto ResultMap con ID como commentResult. Puede 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 identificación y nodos de resultados correspondientes a la consulta simple mencionada anteriormente. Sin embargo, aún asignará la identificación correspondiente y otros atributos al objeto de comentarios. Esto es lo que MyBatis mencionó anteriormente que tiene una función de encapsulación automática. Mientras se proporcione el 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 ayudará a encapsularlo 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 relaciones uno a uno o de uno a muchos en el caso de uno a uno. En aplicaciones reales, hay otra aplicación que se usa con más frecuencia. Es para averiguar las más partes correspondientes a través de uno a uno. Al eliminar las partes más, también necesita asociarse uno a uno: al eliminar el objeto del blog, elimine todos los comentarios correspondientes, y al sacar el comentario, aún necesita eliminar el blog correspondiente, que se saca en Java a través de una solicitud.
< javatype = "blog" columna = "blog" select = "selectblog"/> </resultmap> <select id = "selectblog" parametertype = "int" resultmap = "Blogresult"> select * t_blog where id = #{id} </select> <select id = "selectCommentsByblog" Parametertype = "int" ResultMap = "CommentResUlt" de SELECT * de SELECT "SELECT" SELECT "SELECT" SELECT "SELECT SELECT" SELECT "SELECT" SELECT * DETOMENTO "SELECT" SELECT "SELECT) #{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.
public void selectcommentsByBlogTest () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); commentMapper CommentMapper = session.getMapper (commentMapper.class); list <Comments> comentarios = comment.selectcommentsByBlog (6); void testSelectone () {sqlsession session = util.getSqlSessionFactory (). OpenSession (); BlogMapper BlogMapper = Session.getMapper (BlogMapper.Class); blog Blog = BlogMapper Comentarios) System.out.println (comentario);} session.close ();}Lo anterior es el resultado de resultados y el resultado de resultados en MyBatis presentados 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!