Para aqueles que não estão muito claros sobre o básico do Mybatis, consulte este artigo: Mybatis Introdução Aprendizagem Tutorial (i) - Mybatis Introdução rápida.
Conheça mybatis
Mybatis é um projeto de código aberto do Apache. Em 2010, este projeto foi transferido da Apache Software Foundation para o Google Code e foi renomeado Mybatis. Migrou para o GitHub em novembro de 2013.
O termo ibatis vem da combinação de "Internet" e "Abatis", e é uma estrutura de camada de persistência baseada em Java. Ibatis fornece estruturas de camada de persistência, incluindo mapas SQL e objetos de acesso a dados (DAO)
Álbum de imagem Mybatis
Introdução
Mencionei a consulta simples de banco de dados e a consulta de gerenciamento antes. Existem algum desenvolvimento de demanda individual, um para muitos e muitos para muitos nos requisitos de desenvolvimento. Por exemplo, ao desenvolver carrinhos de compras, os pedidos e usuários são individuais, os usuários e pedidos são um para muitos e os usuários e produtos são muitos para muitos. Estes também são comuns no desenvolvimento de hibernados. Eles são implementados através do mapeamento de dados no Hibernate e, nos Mybatis, são implementados através do mapeamento de dados em arquivos de configuração.
Consulta individual
Se queremos consultar informações sobre pedidos e associar as informações do usuário da consulta para criar pedidos, essa é uma consulta típica individual. Existem duas maneiras de implementar uma consulta individual: use ResultType e ResultMap. O resultado requer uma definição de pojo adicional e, em seguida, os campos de consulta correspondem ao recém -definido Pojo um por um. O ResultMap precisa implementar a correlação individual entre dois POJOS por meio de arquivos de configuração. Vamos implementar esses dois métodos separadamente abaixo.
ResultType:
1. Crie um pojo e adicione os novos atributos que precisam ser mapeados para o novo Pojo.
public class OrdemCustom estende os pedidos {// Adicionar informações sobre o usuário private string nome de usuário; sexo privado de cordas; endereço de string privado; public String getUserName () {return Username; } public void setUserName (string userName) {this.username = nome de usuário; } public string getSex () {return Sex; } public void SetSex (sexo de string) {this.sex = sexo; } public string getAddress () {retornar endereço; } public void setAddress (endereço da string) {this.address = endereço; }}2. Arquivos de mapeamento:
<SELECT ID = "FindOrderUser" resultType = "com.luchao.mybatis.first.po.ordercustom"> Selecione pedidos.
3. Implementação da interface do mapeador:
// Consulta Order and User Information List Public List <OrderCustom> findOrderUser () lança exceção;
4. Código de teste:
public void findordersUser () lança exceção {// obtenha o objeto sqlSession sqlSession sqlSession = sqlSessionFactory.opensssion (); // Crie o objeto OrderMapper, o Mybatis gera automaticamente o Mapper Proxy OrderMapper OrderMapper = SQLSession.GetMapper (OrderMapper.class); // Ligue para o método OrderMapper para consultar o pedido e a lista de informações do usuário <ERRESCECUSTOM> OrderCustoms = OrderMapper.FindOrderUser (); System.out.println (OrderCustoms.size ()); }ResultMap Implementation:
O ResultMap mapeia as informações do pedido no resultado da consulta ao objeto Ordens, adiciona o atributo do usuário na classe Orders e mapeia as informações do usuário da consulta associada ao atributo do usuário no objeto Ordens.
1. Crie um pojo e adicione o atributo do usuário à classe de pedido.
public class Ordens {ID inteiro privado; IDERIDADE INTERGOR DE PRIVADO; número de string privado; data privada createTime; nota de string privada; // Informações do usuário Usuário privado do usuário; // Pedido Lista privada de entrada <LeerDetail> OrderDetails; public integer getId () {return id; } public void SetId (ID inteiro) {this.id = id; } public integer getUserId () {return userID; } public void setUserID (Inteiro UserID) {this.UserID = UserID; } public string getNumber () {retornar número; } public void setNumber (string número) {this.number = número == null? nulo: número.Trim (); } public data getCreateTime () {return createTime; } public void setCreateTime (data createTime) {this.createTime = createTime; } public string getNote () {retorna nota; } public void setNote (String Note) {this.note = Note == NULL? null: note.trim (); } usuário público getUser () {return user; } public void SetUser (usuário do usuário) {this.User = user; } Lista pública <OrderDetail> getOrderDetails () {return OrderDetails; } public void SetOrderDetails (List <OrderDetail> OrderDetails) {this.orderDetails = OrderDetails; }}2. Arquivos de mapeamento:
Consulta de encomenda do mapa resultante do usuário associado, mapeie toda a consulta resulta em ordens-> <resultMap type = "com.luchao.mybatis.first.po.orders" id = "orderSuSerResultmap"> <id column = "id =" id => <sell column = "user_id"> <resultado column = "CreateTime" Property = "CreateTime" /> <Result Column = "note" Property = "Note" /> <!-Configure as informações do usuário associadas do mapeamento-> <!-Associação: Usado para mapear informações para uma propriedade de consulta associada "Propriedade de objeto: Usuário em ordens para mapear as informações do usuário da consulta associada a-> <Association =" " javatype = "com.luchao.mybatis.first.po.user"> <!-ID: ID exclusivo da coluna do usuário da consulta associada: especifique a coluna que identifica exclusivamente as informações do usuário /javatype: qual propriedade do usuário mapa para-> <iD column = "user_id" ("ida" /> <> <> < Property = "Sex"/> <Result Column = "endereço" propriedade = "endereço"/> </Association> </resultMap> <select id = "findOrderUserMap" resultMap = "OrdersUserResultMap"> Selecione Ordens.Associação: Usado para mapear as informações de um objeto único de consulta associado, propriedade: qual propriedade nos pedidos para mapear as informações do usuário da consulta associada.
3. Interface do mapeador
// Ordem de consulta e as informações do usuário através da Lista Pública ResultMap <Orders> findOrderUserMap () lança exceção;
4. Código de teste:
public void findordersuserMap () lança exceção {// obtenha o objeto sqlSession sqlSession sqlSession = sqlSessionFactory.opensssion (); // Crie o objeto OrderMapper, o Mybatis gera automaticamente o Mapper Proxy OrderMapper OrderMapper = SQLSession.GetMapper (OrderMapper.class); // Ligue para o método OrderMapper para consultar o pedido e a lista de informações do usuário <DODES> Orders = OrderMapper.FindOrderUserMap (); System.out.println (orders.size ()); }Resultype e ResultMap Implemente o resumo de consulta individual:
ResultType: é relativamente simples de implementar usando o resultType. Se o nome da coluna de consulta não estiver incluído no Pojo, você precisará adicionar os atributos correspondentes do nome da coluna para concluir o mapeamento. Se não houver requisitos especiais para resultados de consultas, é recomendável usar o ResultType.
ResultMap: O resultado precisa ser definido separadamente, o que é um pouco problemático. Se houver requisitos especiais para os resultados da consulta, o uso do ResultMap poderá preencher os atributos do Pojo de mapeamento de consulta associado. O ResultMap pode implementar o carregamento preguiçoso, o resultado não pode implementar o carregamento preguiçoso.
Consulta individual
Se você precisar consultar os detalhes do pedido e do pedido, este é o requisito de consulta individual.
1. Pojo é o mesmo que o Pojo da Ordem no Map Results acima. Defina os detalhes do pedido para listar como o atributo do pedido.
2. Arquivos de mapeamento:
<!-Mapa para detalhes e informações do pedido e o uso de informações sobre a herança não precisa configurar as informações do pedido e do usuário-> <ResultMap type = "com.luchao.mybatis.first.po.orders" id = "OrdersOrderDetailResUltMap" estende "OrderSUSERRESULTMAPMAP"> <Coleção = "Coleção" " OFTYPE = "COM.LUCHAO.MYBATIS.FIRST.PO.Orm eDetail"> <Result Column = "OrderDetail_Id" Property = "Id" /> <Result Column = "Itens_id" Property = "Itensid" /> <Result Column = "itens_num" = "itens" ou " /> <Result" /> </resultMap> <select id = "FindEverDorderDetailMap" resultMap = "OrdersOrderDetailResultMap"> Selecione Ordens. orders.user_id = user.id e orderdetail.orders_id = ordens.id </leclect>
O mapa resultante dos pedidos e detalhes do pedido é herdado usando estendências e não há necessidade de configurar o mapeamento das informações do pedido e das informações do usuário.
Coleção: mapeie vários registros para o objeto de coleta da consulta da associação, propriedade: mapeie vários registros para a propriedade Orders.
OFTYPE: Especifica o tipo que mapeia o Pojo no atributo de coleção de listas. Observe que ainda há uma diferença entre o OfType e o One-to-One.
3. Interface do mapeador:
// Consulta de pedidos, detalhes do pedido e informações do usuário através do ResultMap
Lista pública <ordens> findOrderArderDetailMap () lança exceção;
4. Código de teste:
public void findOrderArderDetailMap () lança exceção {// obtenha o objeto sqlSession sqlSession sqlSession = sqlSessionFactory.opensssion (); // Crie o objeto OrderMapper, o Mybatis gera automaticamente o Mapper Proxy OrderMapper OrderMapper = SQLSession.GetMapper (OrderMapper.class); // Ligue para o método OrderMapper para consultar a Lista de Informações sobre Ordem e Usuário <Orders> Orders = OrderMapper.findorderArderDetailMap (); System.out.println (orders.get (). GetOrderDetails (). Size ()); System.out.println (orders.size ()); }Resumo um para muitos:
O Mybatis usa a coleção do ResultMap para mapear vários registros da consulta associada em uma propriedade de coleção de listas.
Implementação usando o resultado resultante:
Mapeando os detalhes da ordem dos pedidos em pedidos, você precisa lidar com isso sozinho, usar um loop duplo para atravessar, remover registros duplicados e colocar detalhes do pedido em encomendas. Isso será mais problemático.
Muitos para muitos
Se consultarmos as informações de compra do produto de usuários e usuários, isso é muitos para muitos e você poderá usar o mapeamento muitos para muitos do Mybatis.
Mapeie as informações do usuário no usuário. Adicione a lista de atributos da lista de pedidos <DEDERS> Lista de pedidos na classe de usuário, mapeie o pedido criado pelo usuário à lista de pedidos, adicione a lista de atributos da lista de detalhes do pedido <DormarDetail> OrderDetials nos pedidos, mapeie os detalhes do pedido aos itens.
1. Pojo
public class OrderDetail {ID inteiro privado; Pedido inteiro privado; itens inteiros privadosIDID; itens inteiros privados Num; // Informações do produto itens privados itens; public integer getId () {return id; } public void SetId (ID inteiro) {this.id = id; } public integer getordersId () {return ordersid; } public void SetordersId (Integer OrdersId) {this.ordersId = ordersId; } public integer getItemsid () {return ItensId; } public void setItemsId (INTERGE ITENSID) {this.itemsid = itensId; } public integer getItemsnum () {retorna itensnum; } public void setItemsNum (INTERGE ITENSNUM) {this.itemsnum = itensnum; } itens públicos getItems () {retornar itens; } public void setItems (itens itens) {this.items = itens; } @Override public string tostring () {return "orderDetail [id =" + id + ", ordersid =" + ordersid + ", itensid =" + itensid + ", itensnum =" + itensnum + "]"; }}2. Arquivos de mapeamento:
<!-consulta o usuário e os produtos adquiridos-> <resultMap type = "com.luchao.mybatis.first.po.user" id = "ordersitemsResultmap"> <!-Informações do usuário-> <id column = "user_id" = "iD" /> resulta colun = "endereço" propriedade = "endereço" /> <!-encomendar informações que um usuário corresponde a vários pedidos, use o mapeamento de coleções-> <coleção de propriedade = "orderslist" oftype = "com.luchao.mybatis.first.po.orders"> <id = "imobiliário" = "id /> <s idos" /<s idos " /") propriedade = "número" /> <resultado column = "createTime" propriedade = "createTime" /> <resultado column = "note" property = "note" /> <!-Detalhes do pedido Um pedido inclui vários detalhes-> <coleção de imóveis = "OrderDetails" OFTYPE = "com.luchao.mybatis.first.po.orderdetail"> column="items_id" property="itemsId" /> <result column="items_num" property="itemsNum" /> <result column="orders_id" property="ordersId" /> <!-- Product information One order details correspond to one product --> <association property="items" javaType="com.luchao.mybatis.first.po.Items"> <id column="items_id" propriedades = "id" /> <resultado column = "itens_name" propriedade = "name" /> <resultado column = "itens_detail" propriedade = "detalhe" /> <resultado column = "itens_price" property = "price" /> < /association> < /coletor> < /coletor> < /resultMap> <select id = "findEarterMApMapMap "MapMap> < /coletor> < /resultMap> <select ID =" FindOrderMapMap "MapMap> " user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id itens.id itens_id, items.name itens, itens.detail, itens, itens, itens, itens, itens, itens, itens, itens.name itens, itens, itens. = user.id e orderdetail.orders_id = ordens.id e orderdetail.items_id = items.id </leclect>
Pode-se observar que muitos para muitos são basicamente uma combinação de um para muitos e um a um. Todos os problemas complexos são basicamente combinações de problemas simples. Contanto que você os analise com cuidado, você pode entender os princípios.
3. Interface do mapeador:
// Pedido de consulta, detalhes do pedido e informações do usuário através da Lista Pública ResultMap <sufers> findEveranditemMap () lança exceção;
4. Código de teste:
public void findOrderAnditemMap () lança Exceção {// obtenha o objeto SQLSession sqlSession sqlSession = sqlSessionFactory.opensssion (); // Crie o objeto OrderMapper, o Mybatis gera automaticamente o Mapper Proxy OrderMapper OrderMapper = SQLSession.GetMapper (OrderMapper.class); // Ligue para o método OrderMapper para consultar o pedido e a lista de informações do usuário <suser> usuários = orderMapper.findordandAnditemMap (); System.out.println (users.get (). Getorderslist (). Get () .getorderDetails (). Get (). GetId ()); // system.out.println (orders.size ()); }Resumo da consulta muitos para muitos:
Os requisitos acima usam o ResultType para mapear os registros consultados em um pojo estendido, que é muito simples de implementar a função de uma lista detalhada, mas isso não pode alcançar o carregamento tardio. Use o ResultMap para mapear uma lista detalhada de itens adquiridos pelos usuários para um objeto, que permite carregamento preguiçoso. O uso do ResultMap é para as funções que possuem requisitos especiais para o mapeamento de resultados de consultas, como mapear requisitos especiais em listas, incluindo várias listas.
ResultMap Resumo
1. ResultType:
efeito:
Mapeie os resultados da consulta em POJO de acordo com o nome da coluna SQL POJO Nome do atributo Consistência.
ocasião:
Exibição comum de registros detalhados, como quando os usuários compram detalhes do produto e exibem todas as informações de consulta associadas na página, você pode usar diretamente o resultado para mapear cada registro em um pojo e atravessar a lista (Pojo na lista) na página front-end.
2. ResultMap:
Use a Associação e a Coleção para concluir o mapeamento avançado individual e um para muitos (existem requisitos de mapeamento especiais para os resultados).
associação:
efeito:
Mapeie as informações de consulta associadas em um objeto Pojo.
ocasião:
Para facilitar as informações associadas à consulta, você pode usar a associação para mapear as informações da ordem associada nos atributos POJO de objetos de usuário, como: consulta de pedidos e informações associadas ao usuário.
O uso do resultado do resultado não pode mapear os resultados da consulta para o atributo pojo do objeto Pojo. Escolha se deve usar o resultado resultante ou o resultado de acordo com as necessidades de atravessar a consulta do conjunto de resultados.
Coleção:
efeito:
Mapeie as informações de consulta associadas em uma coleção de listas.
ocasião:
Para facilitar as informações da consulta de associação atravessada, você pode usar a coleção para mapear as informações da associação para a coleção de listas. Por exemplo: Consultando o módulo de escopo de permissão do usuário e o menu no módulo, você pode usar a coleção para mapear a lista de módulos para mapear os atributos da lista de menus do objeto do módulo. O objetivo disso é facilitar o Traversal consulta o conjunto de resultados da consulta.
Se você usar o ResultType, não poderá mapear os resultados da consulta para a coleção de listas.
O conteúdo acima é o tutorial de aprendizado de mapeamento avançado do Mybatis apresentado pelo editor. Espero que seja útil para você. Se você quiser saber mais, preste atenção no site do Wulin.com!