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