1. Visão geral
Ao selecionar mapeamento em mybatis, o tipo de retorno pode ser usado com o resultadoType ou o resultado. Resultype representa diretamente o tipo de retorno, enquanto o ResultMap é uma referência ao MAP de resultado externo, mas Resultype e ResultMap não podem existir ao mesmo tempo.
Quando o Mybatis está consultando mapeamento, de fato, cada consulta de atributo é colocada em um mapa correspondente, onde a chave é o nome do atributo e o valor é o seu valor correspondente.
① Quando o atributo de tipo de retorno fornecido é o resultado, o MyBatis retira os pares do valor da chave no mapa e os atribui aos atributos correspondentes do objeto especificado pelo resultado. Então, de fato, o tipo de retorno de cada mapa de consulta de Mybatis é o resultado do resultado. No entanto, quando o atributo de tipo de retorno fornecido é resultado, o MyBatis atribui automaticamente o valor correspondente aos atributos do objeto especificado pelo resultado.
② Quando o tipo de retorno fornecido é resultante, porque o mapa não pode representar bem o modelo de domínio, ele precisa convertê -lo ainda mais no próprio objeto correspondente, o que geralmente é muito útil em consultas complexas.
2. ResultStype
Blog.javapublic Class blog {private int id; private string title; conteúdo privado de string; proprietário de sequência privada; lista privada <Comentário> comentários;}Os atributos correspondentes da tabela de banco de dados armazenam ID, título, conteúdo e proprietário.
<typeAlias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <select id = "selectBlog" parameterType = "int" resultype = "blog"> selecione * de t_blog onde id = #{id} </select>Mybatis criará automaticamente um objeto ResultMap e encapsulará o par de valores -chave com base no nome do atributo encontrado. Em seguida, você verá que o tipo de retorno é um objeto de blog e, em seguida, retire o par de valores -chave correspondente ao objeto do blog do resultado e atribua -o.
3. ResultMap
Também é muito útil quando o tipo de retorno é diretamente um resultante, que é usado principalmente para consultas juntas complexas, porque não é necessário realizar consultas simples. Vamos primeiro olhar para uma consulta simples com um tipo de resulção de tipo de retorno e depois examinar o uso de consultas complexas.
①creting uma consulta simples
<ResultMap type = "blog" id = "bloGresult"> <id column = "id" propriedade = "id"/> <resultado column = "title" property = "title"/> <resultado column = "content" Property = "content"/> <resultado column = "proprietário" "column/" proprietário "/" proprietário "/" proprietário "/> <> Property = "proprietário"/> <</ResultMap> <select id = "selectBlog" parameterType = "int" resultmap = "blogreSult"> selecione * de t_blog onde id = #{id} </select>O valor do resultado do resultado no mapa selecionado é o ID de um mapa de resultado externo, indicando para qual resultado é mapeado. O atributo de tipo do Map Result Externo indica que tipo é o resultado do resulteMap. Aqui está o tipo de blog, então Mybatis o eliminará como um objeto de blog. O ID do nó da criança do nó ResultMap é usado para identificar o ID do objeto, enquanto o nó infantil do resultado é usado para identificar algumas propriedades simples. A propriedade da coluna representa os atributos consultados do banco de dados, e a propriedade representa qual propriedade o valor correspondente da propriedade consultada é atribuída ao objeto da entidade. É assim que escrevem o ResultMap para uma consulta simples.
②Complex Consulta
Há uma aula de comentários, que tem uma referência de blog, indicando para qual blog é. Ao consultar o comentário, o blog correspondente também deve ser encontrado e atribuído ao atributo do blog.
Public classe Comentário {private Int ID; Private String Content; Data Private CommentDate = new Date (); Blog Private Blog;} <!-De CommentMapper.xml File-> <ResultMap type = "Comment" id = "CommentResult"> <Propriedade da Association = "Blog" = "SelectBlog" Column = "" Javatype "> ResultMap = "CommentResult"> Selecione * de T_Comment WHERE ID = #{ID} </select> <select ID = "SelectBLog" ParameterType = "Int" ResultType = "Blog"> Selecione * FROPrimeiro, solicite o mapa de seleção com ID como seleção e, em seguida, obtenha um objeto ResultMap com ID como comentário. Você pode ver que o tipo de retorno do resultante correspondente é um objeto de comentário, que possui apenas um nó de associação, e não há ID e resultado dos nós filhos correspondentes à consulta simples mencionada acima. No entanto, ele ainda atribuirá o ID correspondente e outros atributos ao objeto de comentários. É isso que os Mybatis mencionaram anteriormente que possui função de encapsulamento automática. Enquanto o tipo de retorno for fornecido, o Mybatis usará os resultados da consulta para encapsular o objeto correspondente de acordo com seu próprio julgamento. Portanto, na consulta simples acima, se não indicar claramente qual campo corresponde ao ID e qual campo corresponde ao título no resultado, o Mybatis também ajudará a encapsulá -lo de acordo com seu próprio julgamento. O próprio julgamento de Mybatis é comparar o campo da consulta ou seu alias correspondentes com os atributos do objeto de retorno. Se corresponder e o tipo também corresponder, o Mybatis o atribuirá. Um atributo de blog está associado no mapa resultante correspondente acima, e seu tipo Java correspondente é o blog. No método de escrita acima, o objeto associado está associado através de subconsulta e, é claro, também pode ser associado diretamente através da consulta da associação. No nó infantil da associação acima, o atributo de propriedade indica qual propriedade associada é o tipo de retorno resultante. Para o exemplo acima, o atributo do blog gerenciado por comentário; Selecione Indica qual selecione mapa para mapear o atributo associado correspondente, ou seja, ele solicitará um mapa de seleção com o valor correspondente para selecionar para consultar o objeto de atributo associado; A coluna indica o par de valores-chave correspondente ao resulteMap com o ID CommentResult. Este par de valores-chave será usado como um parâmetro para a subconsulta do objeto associado, ou seja, o valor da consulta de atributo do blog no SelectComment é passado como um parâmetro para a subconsulta do blog de objeto associado à subconsulta do blog de objetos associados; O Javatype indica que tipo de objeto associado atual está em Java.
O acima introduz uma consulta de relacionamentos individuais ou um para muitos no caso de um a um. Em aplicações reais, há outro aplicativo que usa com mais frequência. É para descobrir as mais partidos correspondentes por meio de um a um. Ao eliminar mais as partes, ele também precisa associar um para um: ao retirar o objeto do blog, retirar todos os comentários correspondentes e, ao retirar o comentário, ele ainda precisa retirar o blog correspondente, que é retirado em Java através de uma solicitação.
<!-do blogmapper.xml file-> <resultado javatype = "blog" column = "blog" select = "selectBlog"/> </resultMap> <select id = "selectBlog" parameterType = "int" resultmap = "bloGRESULT"> selecione * de t_blog) wHERE # #{id} </select> <select id = "selectOnComComBLOG" ParameterTyPe = {id} </select> <select ID = "SelectComCombLog" blog = #{blogId} </leclect>A entrada da solicitação acima é um mapa selecionado com o ID SelectBlog, e o resultado de retorno é um resultante com ID BlogreSult. O tipo de ID BlogreSult é o blog, que especifica os atributos e campos do ID. Especificar o ID terá um grande efeito na construção interna de Mybatis. Está associado a um objeto de comentários. Como um blog pode ter muitos comentários, que são uma coleção, por isso é mapeado com uma coleção. A seleção ainda indica qual subconsulta é executada para consultar os comentários correspondentes. coluna significa qual valor de campo encontrado acima é passado para a subconsulta como um parâmetro. OFTYPE também representa o tipo de retorno. O tipo de retorno aqui é o tipo dentro da coleção. A razão pela qual o OFTYPE é usada em vez do tipo é que ele é usado dentro de Mybatis para distingui -lo da associação da Associação.
public void SelectCommentsByBLogTest () {SQLSession Session = util.getSqlSessionFactory (). OpenSession (); CommentMapper CommentMapper = session.getMapper (CommentMapper.class); list <Comments> Comentments = CommentMapper.SelectCommentsByBLOG (6); para (Comments) System.oumsyout.Ogument.Ossyt.Oments = CommentMapper.SelectCommentBlog (6); para (Comentário) System.oum.oum.oum.oum.oum.Ament.PentMAppApper.PreeCtComBlog (6); testSelectOne () {SqlSession Session = util.getSqlSessionFactory (). OpenSession (); Blogmapper BlogMapper = session.getMapper (blogmappper.class); blog = blogmappper.selectBlog (6); list <somment> Comentment.getcomments (); se (comentários! Comentários) system.out.println (comentário);} session.close ();}O exposto acima é o resultado e o resultado do resultado em mybatis apresentado a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!