Introdução a Mybatis
Mybatis é uma excelente estrutura de camada de persistência que suporta consultas SQL simples, procedimentos armazenados e mapeamento avançado. O MYBATIS elimina as configurações manuais de quase todo o código e parâmetros JDBC e o encapsulamento de pesquisa do conjunto de resultados. O Mybatis pode usar XML simples ou anotações para configuração e mapeamento original, interfaces de mapeamento e POJOS de Java (objetos Java antigos simples) para registros no banco de dados.
A arquitetura funcional de Mybatis é dividida em três camadas (a imagem é emprestada da Encyclopedia Baidu):
1) Camada de interface da API: fornece APIs de interface para uso externo, através do qual os desenvolvedores manipulam bancos de dados. Depois que a camada de interface receber a solicitação de chamada, ela chamará a camada de processamento de dados para concluir o processamento específico de dados.
2) Camada de processamento de dados: responsável por pesquisa específica de SQL, análise SQL, execução do SQL e processamento de mapeamento de resultados de execução, etc. Seu principal objetivo é concluir uma operação de banco de dados com base na solicitação da chamada.
3) Camada de suporte básico: responsável pelo suporte funcional mais básico, incluindo gerenciamento de conexões, gerenciamento de transações, carregamento de configuração e processamento de cache. Todas essas são coisas comuns, extraindo -as como os componentes mais básicos. Fornece o suporte mais básico para a camada superior da camada de processamento de dados.
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 ResultType. Então, de fato, o tipo de retorno de cada mapa de consulta de Mybatis é um resultante. No entanto, quando o atributo de tipo de retorno que fornecemos é o resultado, o Mybatis atribui automaticamente o valor correspondente aos atributos do objeto especificado pelo resultado. Quando o tipo de retorno que fornecemos é o resultado, porque o mapa não pode representar bem o modelo de domínio, precisamos convertê -lo ainda mais no objeto correspondente, o que geralmente é muito útil em consultas complexas.
Existe um arquivo blog.java
importar java.util.list; public class Blog {private int id; private string title; private string content; private string proprietário; lista privada <Comentário> comentários; public int getId () {return id;} public void setId (int id) {this.id = id;} public string gettitle () {return title;}} {) {title title) {} string; {return content;} public void setContent (String content) {this.content = content;} public string getwner () {return proprietário;} public void setOwner (string proprietário) {this.owner = proprietário;} list public <lessment> getComments () {return; {return "---------------- 博客 ------------------/n id:" + id + "/n título:" + title + "/n Content:" + content + "/n proprietário:" + proprietário;}}A tabela de banco de dados correspondente contém atributos de ID, título, conteúdo e proprietário. Quando realizamos o seguinte mapeamento de consulta
<typeAlias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <!-Arquivo de configuração de mybatis mybatis_config.xml-> <select ID = "SelectBLog" ParameterType = "Inttype =" Blog "> * de T_BLOG" Blogmapper.xml->
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.
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, em seguida, observe o uso de consultas complexas.
Como escrever 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. Em seguida, vamos dar uma olhada em uma consulta mais complicada.
Há uma aula de comentários, que tem uma referência de blog, indicando para qual blog é. Ao consultar o comentário, também devemos descobrir o blog correspondente e atribuí -lo ao atributo do blog.
importar java.util.date; public class Comentário {private int id; conteúdo privado de string; data privada comentandodate = new date (); public blog; public int getId () {return id;} public void SetId (int id) {this.id.id = id;} public string getContent () {return nent; {return Commentdate;} public void setCommentDate (Date CommentDate) {this.commentDate = CommentDate;} public blog getBlog () {return blog;} public void SetBlog (blog blog) {this.blog = blog;} public string tostring () {return + "/n ------------------------, 评论- 评论 评论- 评论 评论; "/n CommentDate:" + comentário;}}Está escrito assim
<!-de Comentmapper.xml arquivo-> <resultMap type = "Comment" id = "commentResult"> <Association Property = "Blog" Select = "SelectBlog" Column = "Blog" Javatype = "Blog"/> </ResultMap> <Select Id = "SelectComment" ParameterTepe = "Int" ResultMap = "CommentrSult"> " #{id} </leclect> <select id = "selectBlog" ParameterType = "int" resultType = "Blog"> Selecione * FROM T_COMENT WHERE ID = #{ID} </select> <select ID = "SelectBlog" ParameterType = "Int" ResultType = "Blog"> Select * From T_blogA situação de acesso é assim. Primeiro, você solicita o mapa de seleção com o ID do selecionamento e, em seguida, obtém um objeto ResultMap com o ID do CommentResult. Podemos ver que o tipo de retorno do ResultMap correspondente é um objeto de comentário, que possui apenas um nó de associação, e não há identificação e nó infantil, correspondentes à consulta simples mencionada acima, mas ainda atribuirá o ID correspondente e outros atributos ao objeto de comentário. Isso é o que o MYB mencionou anteriormente. O ATIS possui função de encapsulamento automática. Desde que você forneça um tipo de retorno, 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 você não indicar claramente qual campo corresponde ao ID e qual campo corresponde ao título no ResultMap, o Mybatis também o encapsulará 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 exposto acima apresenta uma consulta de um relacionamento individual ou um para muitos com um partido único no caso de um para muitos. Em aplicações reais, há outro aplicativo que usa com mais frequência. É necessário descobrir as mais partes correspondentes por meio de uma parte. Ao retirar as partes, uma parte também deve estar associada a uma parte. Ou seja, no exemplo acima, ao retirar o objeto do blog, todos os comentários correspondentes são retirados. Ao retirar o comentário, ele ainda precisa tirar o blog correspondente. Isso é retirado por meio de um pedido em Java. O método de escrita é o seguinte:
<!-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 = #{id} </select> <!-Find Comment by blog-> <select = " ResultMap = "CommentResult"> Selecione * de T_Comment WHERE Blog = #{BlogId} </select>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.
Código de teste:
@Testpublic void SelectCommentsByblogTest () {SQLSession Session = util.getSqlSessionFactory (). OpenSession (); ComentmentMapper CommentMapper = session.GetMapper (CommentMappper.class); List <Comments> Comentments = CommentMapper.SelectComByByblog (6) para (Comments); Comentários) System.out.println (comentário); session.close ();}/*** Consulta um único registro*/@testPublic void testSelectOne () {SQLSession Session = util.getSqlSessionFactory (). OpenSession (); BlogMapper = SesspperMapperMapper (blogMapper.Cl); blog.getcomments (); if (comentários! = null) {System.out.println ("-------------- Tamanho dos comentários -----------" + Comentments.size ()); para (Comentário: Comentários) System.out.println (Comment);} session.close ();}O exposto acima é uma breve visão geral do resultado resultante 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!