English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Funcionalidade de Consulta Múltipla no MyBatis

 Primeiro, vamos fornecer uma necessidade: consultar detalhes de pedidos com base no id do pedido - sabemos que um pedido pode conter vários detalhes de pedidos (para estudantes que não estão claros sobre as necessidades, por favor, deixe um comentário ou visite a seção de pedidos no Taobao). Neste momento, um pedido pode corresponder a vários ids de pedidos. Quando essa necessidade surge, como devemos consultar?

  Neste momento, nosso modelo de dados está representado na figura a seguir (esquerda), pois o usuário da consulta também é uma de nossas necessidades, então foi expandido com base no original, como o modelo de dados a seguir (direita):

    Claramente, se usar a maneira de resultType para implementar, é irracional. Porque precisamos criar um pojo que tenha tanto pedido quanto detalhes do pedido, e então, nosso framework Mybatis mapeará muitos objetos pojo para nós (quantos detalhes de pedido há, quantos objetos).

    Claramente, se usar a maneira de resultType para implementar, é irracional. Porque precisamos criar um pojo que tenha tanto pedido quanto detalhes do pedido, e então, nosso framework Mybatis mapeará muitos objetos pojo para nós (quantos detalhes de pedido há, quantos objetos).

    A implementação específica é como follows:

  Sentença SQL

    Determinar a tabela de consulta principal: tabela de pedido

    Determinar a tabela de consulta associativa: tabela de detalhes do pedido

    Adicionar uma associação de tabela de detalhes do pedido na consulta um-para-um.

SELECT 
 orders.*,
 USER.username,
 USER.sex,
 USER.address,
 orderdetail.id orderdetail_id,
 orderdetail.items_id,
 orderdetail.items_num,
 orderdetail.orders_id
FROM
 orders,
 USER,
 orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id

  Exibição do problema

    Após a consulta, descobrimos um problema: como mostrado na figura, nossos ids aparecem várias vezes, isso é causado por vários detalhes de pedidos correspondentes no banco de dados que usam o mesmo id de pedido. Isso resulta em um registro de orders aparecendo em cada registro. A solução específica, já foi mencionada no início, não será repetida aqui.

  Adicionar atributo de lista de detalhes do pedido no orders  

  

    Definir resultMap

<!-- resultMap do pedido e detalhes do pedido
  Use extends para herança, não é necessário repetir o mapeamento do usuário
   -->
  <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap">
    <!-- Informações do pedido -->
    <!-- Informações do usuário -->
    <!-- Use extends para herança, não é necessário configurar novamente o mapeamento de informações do pedido e do usuário -->
    <!-- Informações detalhadas do pedido
    Um pedido associativo consultou várias linhas detalhadas, é necessário usar collection para mapeamento
    collection:representa a mapeamento de várias consultas associativas em um objeto de coleção
    property: Mapear vários registros de consulta de associação para qual propriedade do cn.itcast.mybatis.po.Orders
    ofType: Especificar o tipo do pojo mapeado para a propriedade de lista
     -->
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
       <!-- id: Identificador único do detalhe do pedido
       property: Mapear o identificador único do detalhe do pedido para qual propriedade do cn.itcast.mybatis.po.Orderdetail
        -->
       <id column="orderdetail_id" property="id">/>
       <result column="items_id" property="itemsId">/>
       <result column="items_num" property="itemsNum">/>
       <result column="orders_id" property="ordersId">/>
     </collection>
  </resultMap>

      

  mapper  

  

  Resumo

    Basicamente, é usar o collection do resultMap para mapear vários registros de consulta de associação para uma propriedade de lista.

O que foi mencionado acima é a função de consulta de um para muitos do mybatis apresentada pelo editor. Espero que ajude a todos. Se você tiver alguma dúvida, por favor, deixe um comentário, o editor responderá a tempo. Agradecemos também o apoio ao site de tutorial de gritos!

Declaração: O conteúdo deste artigo foi extraído da internet, pertence ao respectivo proprietário. O conteúdo foi submetido voluntariamente pelos usuários da internet e este site não possui direitos autorais. Não foi feito processamento editorial humano e não assume responsabilidade legal. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w.3Aviso: Este conteúdo foi extraído da internet, pertence ao respectivo proprietário. O conteúdo foi submetido voluntariamente pelos usuários da internet e este site não possui direitos autorais. Não foi feito processamento editorial humano e não assume responsabilidade legal. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w, fornecendo provas relevantes. Se confirmado, o conteúdo suspeito será removido imediatamente.

Você Também Pode Gostar