Pour ceux qui ne sont pas très clairs sur les bases de Mybatis, veuillez vous référer à cet article: MyBatis Introduction Learning Tutoriel (i) - Mybatis rapide Introduction.
Rencontrez mybatis
MyBatis est un projet open source d'Apache. En 2010, ce projet a été déplacé de la Fondation du logiciel Apache à Google Code et a été renommé Mybatis. Migré vers Github en novembre 2013.
Le terme ibatis vient de la combinaison de "Internet" et "Abatis", et est un cadre de couche de persistance basé sur Java. IBATIS fournit des cadres de couche de persistance, y compris les cartes SQL et les objets d'accès aux données (DAO)
album d'image mybatis
Introduction
J'ai déjà mentionné la requête de base de données simple et la requête de gestion. Il y a des à un à plusieurs, un à plusieurs et plusieurs à plusieurs de la demande dans les exigences de développement. Par exemple, lors du développement de paniers d'achat, les commandes et les utilisateurs sont individuels, les utilisateurs et les commandes sont un à plusieurs et les utilisateurs et les produits sont plusieurs à plusieurs. Ceux-ci sont également courants dans le développement d'hibernate. Ils sont implémentés via la cartographie des données dans Hibernate et dans MyBatis, ils sont implémentés via la cartographie des données dans les fichiers de configuration.
Requête individuelle
Si nous souhaitons interroger les informations des commandes et associer les informations des utilisateurs de requête pour la création de commandes, il s'agit d'une requête individuelle typique. Il existe deux façons d'implémenter une requête individuelle: utilisez ResultType et ResultMap. ResultType nécessite une définition de POJO supplémentaire, puis les champs de requête correspondent au pojo nouvellement défini un par un. ResultMap doit implémenter une corrélation individuelle entre deux POJOS via des fichiers de configuration. Implémentons ces deux méthodes séparément ci-dessous.
ResultType:
1. Créez un POJO et ajoutez les nouveaux attributs qui doivent être mappés au nouveau pojo.
classe publique OrderCustom étend les ordres {// Ajouter des informations utilisateur Nom d'utilisateur de chaîne privée; Sexe à cordes privées; adresse de chaîne privée; public String getUserName () {return username; } public void setUsername (String username) {this.userName = username; } public String getSEX () {return sexe; } public void setSex (String Sex) {this.sex = sexe; } public String getAddress () {return adresse; } public void setAddress (adresse de chaîne) {this.address = adresse; }}2. Fichiers de cartographie:
<select id = "findOrderUser" resultType = "com.luchao.mybatis.first.po.ordercustom"> sélectionner les ordres. *, user.userName, user.sex, user.address dans les commandes, utilisateur où orders.user_id = user.id </lect>
3. Implémentation de l'interface de mapper:
// Informations de requête et d'informations utilisateur Liste publique <ordCustom> findOrderUser () lève une exception;
4. Code de test:
public void FindOrdersUser () lève une exception {// Obtenez l'objet SQLSession SqlSession SqlSession = SQLSessionFactory.OpenSession (); // Créer l'objet OrderMapper, MyBatis génère automatiquement le proxy de mappeur OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class); // Appelez la méthode OrderMapper pour interroger l'ordre et la liste d'informations utilisateur <COMMANDCUSTOM> ORDERCUSTUMS = ORDERMPAPER.FINDORDUSER (); System.out.println (OrderCustoms.size ()); }Implémentation de résultat:
ResultMap Maptes Les informations de commande dans le résultat de la requête dans l'objet Orders, ajoute l'attribut utilisateur dans la classe Orders et mappe les informations utilisateur de requête associées à l'attribut utilisateur dans l'objet Orders.
1. Créez un POJO et ajoutez l'attribut utilisateur à la classe de commande.
Ordonnances de classe publique {ID entier privé; INTEGER PRIVATE USERID; numéro de chaîne privé; Date privée CreateTime; Note de chaîne privée; // Informations utilisateur utilisateur privé utilisateur; // Commandez la liste privée de la liste <ordDetail> OrderDetails; public Integer getID () {return id; } public void setid (INGER ID) {this.id = id; } public Integer getUserId () {return userId; } public void SetUserId (Integer Userid) {this.UserId = userId; } public String getNumber () {Numéro de retour; } public void setNumber (string number) {this.number = nombre == null? null: nombre.trim (); } public Date getcreatetime () {return CreateTime; } public void setCreateTime (date CreateTime) {this.createtime = CreateTime; } public String getNote () {return note; } public void setNote (String note) {this.note = note == null? null: note.trim (); } public utilisateur getUser () {return utilisateur; } public void SetUser (utilisateur utilisateur) {this.user = utilisateur; } public list <ordDetail> getOrderDetails () {return orderDetails; } public void setOrderDetails (list <ordDetail> OrderDetails) {this.OrderDetails = OrderDetails; }}2. Fichiers de cartographie:
<! - Commandez la requête du résultat de l'utilisateur associé, mappez l'intégralité du résultat de la requête aux ordres -> <resultmap type = "com.luchao.mybatis.first.po.orders" id = "ordersuserresultmap"> <id column = "id" property = "id" /> <result Collum <Result Column = "CreateTime" Property = "CreateTime" /> <Result Column = "Remarque" Property = "Remarque" /> <! - Configurez les informations utilisateur associées de la mappage -> <! - Association: Utilisé pour cartographier les informations pour une propriété unique de requête associée: quelle propriété dans les commandes pour cartographier les informations utilisateur de la requête associée à -> <association propriété = "utilisateur" javatype = "com.luchao.mybatis.first.po.user"> <! - ID: ID unique de la colonne utilisateur de requête associée: spécifiez la colonne qui identifie de manière unique les informations utilisateur javatype: quelle propriété de la carte utilisateur à -> <id column = "user_id" property = "id" /> colonne = " Property = "Sex" /> <Result Column = "Address" Property = "Address" /> </ Association> </SultMap> <Select Id = "FindOrderUserAp" resultMap = "OrdersuserResultMap"> Sélectionner Orders. *, user.username, user.sex, user.address à partir des commandes, user où les orders.user_id = user.id </ select>
Association: Utilisé pour cartographier les informations d'un objet unique de requête associée, propriété: quelle propriété dans les ordres pour cartographier les informations utilisateur de la requête associée.
3. Interface de mapper
// Informations sur commande et utilisateur de requête via ResultMap Public List <Drères> findOrderUserAP () lève une exception;
4. Code de test:
public void FindOrdersUserMap () lève une exception {// Obtenez l'objet SQLSession SqlSession SqlSession = SQLSessionFactory.OpenSession (); // Créer l'objet OrderMapper, MyBatis génère automatiquement le mappeur OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class); // Appelez la méthode OrderMapper pour interroger la liste des informations et des informations d'utilisateur <Dorse> Orders = OrderMapper.FindOrderUserMap (); System.out.println (orders.size ()); }ResultimeType et ResultMap implémenter un à un résumé de la requête individuelle:
ResultType: il est relativement simple à implémenter à l'aide de ResultType. Si le nom de la colonne de requête n'est pas inclus dans le POJO, vous devez ajouter les attributs correspondants du nom de la colonne pour terminer le mappage. S'il n'y a pas d'exigences particulières pour les résultats de la requête, il est recommandé d'utiliser ResultType.
ResultMap: le résultat doit être défini séparément, ce qui est un peu gênant. S'il existe des exigences particulières pour les résultats de la requête, l'utilisation de ResultMap peut compléter les attributs du pojo de mappage de requête associé. ResultMap peut implémenter le chargement paresseux, ResultType ne peut pas implémenter le chargement paresseux.
Requête un-à-plusieurs
Si vous devez interroger les détails de la commande et de la commande, il s'agit de l'exigence de requête un-à-plusieurs.
1. Pojo est le même que le pojo de l'ordre dans le résultat Map ci-dessus. Définissez les détails de la commande sur la liste comme l'attribut de la commande.
2. Fichiers de cartographie:
<! - Carte pour les détails de commande et de commande et les informations de l'utilisateur Utilisation de l'héritage n'a pas besoin de configurer les informations de commande et d'utilisateur -> <resultMap type = "com.luchao.mybatis.first.po.orders" id = "ordersOrderDetailResultMap" étend = "OrderSuSerResultMap"> <collection Property = "OrderDetails" ofType = "com.luchao.mybatis.first.po.orderdetail"> <résultat chronn = "OrderDetail_id" propriété = "id" /> <résultat chronn = "iteles_id" propriété = "itemdId" /> <résultat column = " </cultMap> <Select Id = "finderAndOrderDeTailMap" resultMap = "OrdersOrderDetailResultMap"> Sélectionner Orders. *, user.userName, user.sex, user.address, orderdetail.id orderdetail_id orders.user_id = user.id et orderdetail.orders_id = orders.id </lect>
Le résultat des commandes et des détails des commandes est hérité à l'aide des étendues, et il n'est pas nécessaire de configurer le mappage des informations de commande et des informations utilisateur.
Collection: Carte plusieurs enregistrements vers l'objet de collection pour la requête d'association, propriété: mappez plusieurs enregistrements vers la propriété des commandes.
OFTYPE: Spécifie le type qui mappe au POJO dans l'attribut de collection de liste. Notez qu'il y a toujours une différence entre OFType et un à un.
3. Interface de mapper:
// Enquête sur les commandes, les détails des commandes et les informations de l'utilisateur via ResultMap
Liste publique <Dorse> findOrderAndOrderDetailMap () lève une exception;
4. Code de test:
public void FindOrderAndOrderDetailMap () lève une exception {// Obtenez l'objet SQLSession SqlSession SqlSession = SqlSessionFactory.OpenSession (); // Créer l'objet OrderMapper, MyBatis génère automatiquement le mappeur OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class); // Appelez la méthode OrderMapper pour interroger la liste des informations et des informations d'utilisateur <Dorse> Orders = OrderMapper.FindOrderAndOrderDetTailMap (); System.out.println (Orders.get (). GetOrderDetails (). Size ()); System.out.println (orders.size ()); }Résumé un-à-plusieurs:
MyBatis utilise la collection de ResultMap pour cartographier plusieurs enregistrements de la requête associée dans une propriété de collection de liste.
Implémentation à l'aide de ResultType:
Mappage des détails des commandes dans OrderDetails dans les commandes, vous devez le gérer vous-même, utiliser une boucle double pour traverser, supprimer des enregistrements en double et placer les détails des commandes dans OrderDetails. Ce sera plus gênant.
Plusieurs à plusieurs
Si nous interrogeons les utilisateurs et les utilisateurs d'achat des informations sur les produits, c'est plusieurs à plusieurs et vous pouvez utiliser la cartographie de plusieurs à plusieurs de MyBatis.
Cartez les informations de l'utilisateur dans l'utilisateur. Ajoutez la liste des attributs de la liste de commandes <Com sur les ordres> dans la classe d'utilisateurs, mappez l'ordre créé par l'utilisateur à la liste de commande, ajoutez la liste des attributs de la liste des commandes <OrderDetail> OrderDetials dans les commandes, mappez les détails de la commande à OrderDetiels, ajoutez l'attribut des éléments dans l'OrdreDetail et mappez les éléments correspondant aux détails de la commande aux éléments.
1. Pojo
classe publique OrderDetail {ID entier privé; OrderSid entier privé; Inteled Private IletsId; Intelets entiers privés; // Informations de produit Articles privés; public Integer getID () {return id; } public void setid (INGER ID) {this.id = id; } public entier getordersid () {return ordersId; } public void setordersid (Integer OrderSid) {this.ordersid = ordersId; } public entier getItemSid () {return itemsId; } public void setItemSid (Integer itemsID) {this.itemSid = itemsId; } public entier getItemsnum () {return itemsNum; } public void setItemsnum (Integer itemsNum) {this.itemsnum = itemsNum; } publics public getItems () {return items; } public void setItems (items items) {this.items = items; } @Override public String toString () {return "orderDetail [id =" + id + ", ordersid =" + ordersid + ", itemSID =" + itemSID + ", itemsnum =" + itemsnum + "]"; }}2. Fichiers de cartographie:
<! - interroger l'utilisateur et acheté des produits -> <resultmap type = "com.luchao.mybatis.first.po.user" id = "ordersitemsResultMap"> <! - Informations utilisateur -> <id chronn = "user_id" Property = "id" /> <résultat chronnk = "username" propriété = "username" /> <le résultat column = "sex" Column = "adresse" propriété = "adresse" /> <! - Informations de commande Un utilisateur correspond à plusieurs commandes, utilisez le mappage de collection -> <collection propriété = "OrdersList" ofType = "com.luchao.mybatis.first.po.orders"> <id column = "id" propriété = "id" /> <résultat colonnet = "user_id" Property = "userdId" /> <nombre Column = "user_id" Property = "userdId" /> < Property = "Number" /> <Result Column = "CreateTime" Property = "CreateTime" /> <Result Column = "Remarque" Property = "Remarque" /> <! - Détails de la commande Un ordre comprend plusieurs détails -> <Collection Property = "OrderDetails" OFTYPE = "COM.LUCHAO.MYBATIS. Column = "items_id" propriété = "itemSID" /> <result Column = "items_num" Property = "itemSnum" /> <résultat Column = "Orders_id" Property = "OrdersId" /> <! - Informations de produit Les détails de l'ordre correspondent à un produit -> <association Property = "Items" Javatype = "com.luchao.mybatis.firSt. propriété = "id" /> <résultat chronn = "items_name" propriété = "name" /> <résultat chronn = "items_detail" propriété = "Détail" /> <result Column = "items_price" Property = "price" /> </ association> </ collection> </ collection> </ resultmap> <sélectionn id = "finandAndremmap" resultMap = "ordersite user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, ordonnance = user.id et orderdetail.orders_id = orders.id et orderdetail.items_id = items.id </lect>
On peut voir que plusieurs à plusieurs sont essentiellement une combinaison de un-à-plusieurs et un à un. Tous les problèmes complexes sont essentiellement des combinaisons de problèmes simples. Tant que vous les analysez attentivement, vous pouvez comprendre les principes.
3. Interface de mapper:
// La commande de requête, les détails de la commande et les informations de l'utilisateur via la liste publique ResultMap <User> findOrderAndremMap () lève une exception;
4. Code de test:
public void FindOrderAndremMap () lève une exception {// Obtenez l'objet SQLSession SqlSession SqlSession = SqlSessionFactory.OpenSession (); // Créer l'objet OrderMapper, MyBatis génère automatiquement le mappeur OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class); // Appelez la méthode OrderMapper pour interroger l'ordre et la liste d'informations utilisateur <ser utilisateur> utilisateurs = OrderMapper.FindordanDItemMap (); System.out.println (users.get (). Getorderslist (). Get () .getOrderDetails (). Get (). GetID ()); // System.out.println (orders.size ()); }Résumé de la requête plusieurs à plusieurs:
Les exigences ci-dessus utilisent ResultType pour cartographier les enregistrements interrogés dans un POJO étendu, qui est très simple pour implémenter la fonction d'une liste détaillée, mais cela ne peut pas implémenter un chargement paresseux. Utilisez ResultMap pour cartographier une liste détaillée des éléments achetés par les utilisateurs dans un objet, ce qui permet un chargement paresseux. L'utilisation de ResultMap est destinée aux fonctions qui ont des exigences particulières pour la cartographie des résultats de requête, telles que la cartographie des exigences spéciales dans des listes, y compris plusieurs listes.
Résumé de résultat
1. ResultType:
effet:
Map que les résultats de la requête dans POJO en fonction du nom de colonne SQL POJO Nom de l'attribut.
occasion:
Affichage commun des enregistrements détaillés, par exemple, lorsque les utilisateurs achètent les détails du produit et affichent toutes les informations de requête associées sur la page, vous pouvez directement utiliser ResultType pour cartographier chaque enregistrement dans un POJO et traverser la liste (Pojo dans la liste) sur la page frontale.
2. ResultMap:
Utiliser l'association et la collecte pour compléter la cartographie avancée individuelle et un à plusieurs (il existe des exigences de cartographie spéciales pour les résultats).
association:
effet:
Cartez les informations de requête associées dans un objet PoJO.
occasion:
Afin de faciliter l'interrogation des informations associées, vous pouvez utiliser l'association pour cartographier les informations de commande associées dans les attributs POJO des objets utilisateur, tels que: interroger les commandes et les informations utilisateur associées.
L'utilisation de ResultType ne peut pas cartographier les résultats de la requête à l'attribut POJO de l'objet PoJO. Choisissez d'utiliser ResultType ou ResultMap en fonction des besoins de traversant la requête Set Set.
Collection:
effet:
Cartez les informations de requête associées dans une collection de liste.
occasion:
Afin de faciliter l'interrogation des informations d'association de traversée, vous pouvez utiliser la collection pour cartographier les informations d'association à la collection de liste. Par exemple: interroger le module de portée de l'autorisation de l'utilisateur et le menu sous le module, vous pouvez utiliser la collection pour cartographier la liste des modules pour cartographier les attributs de liste de menu de l'objet module. Le but de cela est de faciliter la traversée de la traversée de l'ensemble de résultats de requête.
Si vous utilisez ResultType, vous ne pouvez pas cartographier les résultats de la requête à la collection de liste.
Le contenu ci-dessus est le didacticiel d'apprentissage de mappage Advanced MyBatis qui vous est présenté par l'éditeur. J'espère que cela vous sera utile. Si vous voulez en savoir plus, veuillez faire attention au site Web de Wulin.com!