Introduction à 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)
1. Package de pot requis
Ici, nous discutons de l'utilisation de Mybatis séparément, il suffit de mettre le package MyBatis-XXXJar.
Si vous utilisez Maven pour créer un projet, vous devez mettre la configuration suivante dans la dépendance de pom.xml:
<dependency> <proupId> org.mybatis </rompgroud> Mybatis </ artifactId> <DERSE> 3.2.2 </DERNIFRICATION> </DENDENCENCE>
La société utilise actuellement 3.2.2 et vous pouvez mettre le numéro de version en fonction de votre propre package JAR.
Si vous vous intégrez au cadre correspondant, vous devez mettre le package d'intégration. Par exemple, notre entreprise utilise MyBatis pour s'intégrer au printemps.
Vous devez également ajouter le package MyBatis-Spring-xxx.jar et décider en fonction de la situation réelle. Bien sûr, les packages de bocaux de pilote de base de données sont également indispensables.
2. Construisez SQLSessionFactory de XML
Chaque application basée sur MyBatis est centrée sur une instance de SQLSessionFactory.
Une instance de SQLSessionFactory peut être obtenue via SQLSessionFactoryBuilder.
SQLSessionFactoryBuilder peut créer une instance de SQLSessionFactory à partir d'un fichier de configuration XML ou d'une instance de configuration pré-personnalisée.
Il est très simple de créer une instance de SQLSessionFactory à partir d'un fichier XML. Il est recommandé d'utiliser le fichier de ressources sous le chemin de classe pour la configuration.
Cependant, il peut également être configuré à l'aide de n'importe quelle instance InputStream, y compris un chemin de fichier sous la forme d'une chaîne ou un chemin de fichier sous la forme d'un fichier: // url.
MyBatis contient une classe d'outils appelée Ressources, qui contient certaines méthodes pratiques qui facilitent le chargement des fichiers de ressources à partir de ClassPath ou d'autres emplacements.
Par exemple:
String Resource = "MyBatis-Config.xml"; InputStream Is = Resources.getResourceAsStream (Resource); SQLSessionFactory SqlSessionFactory = new SQLSessionFactoryBuilder (). Build (is);
Le fichier de configuration XML (configuration XML) contient les paramètres de base du système MyBatis, y compris la source de données pour obtenir l'instance de connexion de la base de données (DataSource)
et un gestionnaire de transactions (TransactionManager) qui détermine la portée et le mode de contrôle des transactions. Le fichier de configuration sera discuté en détail plus tard.
Par exemple:
<! -? xml version = "1.0" Encoding = "UTF-8"? -> <FIFIGIGURATION> <Environments default = "Development"> <Environment ID = "Development"> <transactionmanager type = "JDBC"> <DataSource Type = "Poolled"> <Property Name = "Driver" Value = "com.mysql.jdbc.Driver"> <propriété Name = "URL" Value = "JDBC: mysql: //192.168.200.12: 3306 / test_mybatis"> <propriété name = "username" value = "root"> <propriété name = "mot de passe" value = "root123"> </ propriété> </ propriété> </ propriété> </ datasource> Fichier usermainmapper.xml. Usermainmapper.xml est situé dans le package com.lanhuigu.mybatis.map, donc la ressource est écrite comme com / lanhugu / mybatis / map / usermainmapper.xml -> <mapper ressource = "com / lanhugu / mybatis / map / usermainmapper.xml"> </murse>
Le corps de l'élément d'environnement contient la configuration de la gestion des transactions et de la mise en commun des connexions. L'élément de mappeurs contient un ensemble de mappeurs de mappeurs (les fichiers XML de ces mappeurs contiennent du code SQL et des informations de définition de mappage).
3. Obtenez SQLSession de SQLSessionFactory
Maintenant que nous avons le SQLSessionFactory, nous pouvons en obtenir une instance de SQLSession. SQLSession contient entièrement toutes les méthodes requises pour exécuter les commandes SQL dans une base de données.
Vous pouvez exécuter directement les instructions SQL mappées via l'instance SQLSession. Par exemple:
SqlSessionFactory sqlSessionFactory = null; // xml build sqlSessionFactory Factory instance sqlSession session = null; // obtenez l'objet sqlSession de l'instance d'usine SQLSessionFactory essaie {String Resource = "MyBatis-Config.xml"; EntreStream is = Resources.getResourceSStream (Resource); sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (IS); session = sqlsessionfactory.opencession (); user user = session.selectone (com.lanhugu.mybatis.map.usermapper.queryUsermainbyid ", 1); System.out.println (user.getUserName ());} enfin {session.close ();} Il n'y a aucun problème à exécuter la cartographie de cette manière, nous pouvons également effectuer la cartographie d'une manière plus concise.
Utilisez une interface qui peut raisonnablement décrire les paramètres et les valeurs de retour pour une instruction donnée (par exemple, userMainMapper.class),
Non seulement vous pouvez exécuter un code plus clair et plus sûr maintenant, mais vous n'avez pas à vous soucier des littéraux et des moulages de chaînes sujettes aux erreurs. Par exemple:
SqlSession Session = SQLSessionFactory.OpenSession (); UserMainMapper UserMainMapper = Session.getMapper (UserMainMapper.class); utilisateur utilisateur = usermainMapper .QueryUserMainById (1);
4. Exemple
Il est facile de se confondre en lisant mais pas à la pratique. Regardez les exemples et revenez pour lire le document, peut-être que l'effet sera meilleur.
Préparer le package de pot:
mybatis-3.2.2.jar (mybatis)
MySQL-Connector-Java-5.1.21.jar (pilote de base de données)
JUnit-4.4.jar (test, je ne veux pas utiliser ce Junit, vous pouvez utiliser la méthode principale pour le tester)
Structure du projet:
base de données:
Créer la table `t_user_main` (` f_id` int (11) pas null, `f_username` varchar (20) par défaut null,` f_age` int (3) par défaut null, clé primaire (`f_id`)) moteur = myisam charit par défaut = latin1; insert dans t_user_main valeurs (1, 'testmybatis', 25);
Configuration XML de MyBatis - Mybatis-Config.xml:
<! -? xml version = "1.0" Encoding = "UTF-8"? -> <FIFIGIGURATION> <Environments default = "Development"> <Environment ID = "Development"> <transactionmanager type = "JDBC"> <DataSource Type = "Poolled"> <Property Name = "Driver" Value = "com.mysql.jdbc.Driver"> <propriété Name = "URL" Value = "JDBC: mysql: //192.168.200.12: 3306 / test_mybatis"> <propriété name = "username" value = "root"> <propriété name = "mot de passe" value = "root123"> </ propriété> </ propriété> </ propriété> </ datasource> Fichier usermainmapper.xml. Usermainmapper.xml est situé dans le package com.lanhuigu.mybatis.map, donc la ressource est écrite comme com / lanhugu / mybatis / map / usermainmapper.xml -> <mapper ressource = "com / lanhugu / mybatis / map / usermainmapper.xml"> </murse>
User.java:
Package com.lanhuigu.mybatis.entity; import java.io.serializable; public class utilisateur implémente sérialisable {private static final SerialVersionUid = -3412068097348759984l; ID entier privé; id) {this.id = id;} public String getUserName () {return username;} public void setUserName (String username) {this.userName = username;} public Integer getage () {return}Usermainmapper.xml:
<! -? xml version = "1.0" Encoding = "utf-8"? -> <! - Spécifiez un espace de noms unique pour ce mappeur. La valeur de l'espace de noms est conventionnellement définie sur le nom du package + Supprimer le nom de fichier du suffixe du fichier de carte SQL. Cela peut garantir que la valeur de l'espace de noms est unique. Par exemple, namespace = "com.lanhuigu.mybatis.map.usermainmapper" est com.lanhuigu.mybatis.map (nom du package) + usermainmapper (usermainmapper.xml est supprimé) -> < Instruction SQL Dans la balise SELECT, définissez l'attribut ID de la balise de sélection sur QueryUserainById, la valeur d'attribut ID doit être unique et l'attribut ParamètreType ne peut pas être réutilisé pour indiquer le type de paramètre utilisé dans la requête. L'attribut ResultType indique le type de jeu de résultats renvoyé par le requête resultType = "com.lanhuigu.mybatis.entity.user" signifie encapsuler le résultat de la requête dans un objet de la classe utilisateur Retour à la classe d'utilisateurs, qui est la classe d'entité correspondant au tableau des utilisateurs -> <sélectionner id = "QueryUserainId" ParamètreType = "inT" resultType = "com.lanhuigu.mybatis.entity.user"> Sélectionnez F_id id, f_username username, f_age Âge from t_user_main où f_id = # {id} </lect> </ mapper>Code de test MyBatistest.java:
package com.lanhuigu.mybatis; import java.io.ioexception; import java.io.inputStream; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; import org.apache.ibatis.session.sessionfactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; classe publique MybatisteSt {@TestPublic Void testmybatis () throws ioexception {sqlSessionFactory sqLSessionfactory = null; Instance d'usine SQLSessionFactory SQLSession Session = NULL; // Obtenez l'objet SQLSession Try {//1.mybatis de configuration du fichier, qui est placé sous ClassPath, qui équivaut à String Resource = "Mybatis-Config.xml"; // 2. Lisez le fichier de configuration MyBatis et créez l'instance d'usine SQLSessionFactory // ===== 2.1 Utilisez le chargeur de classe pour charger le fichier de configuration MyBatis (il charge également le fichier de mappage associé) // InputStream est = MyBatisTest.Class.getClassload (). Factory // SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (IS); // ===== 2.2 Utilisez la classe de ressources fournie par MyBatis pour charger le fichier de configuration de MyBatis (il charge également le fichier de mappage associé) // Reader Reader = Resources.getResourceAnder (ressource); // Créez la SQLSessionFactory Factory // SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); // ===== 2.3 Utilisez la classe de ressources fournie par MyBatis pour charger le fichier de configuration de MyBatis est le SQLSSessionfactFactory Nouveau SqlSessionFactoryBuilder (). Build (IS); // 3. Créer une SQLSESISIONSESSESSE qui peut exécuter SQL dans le fichier de mappage = SQLSessionFactory.OpenSession (); / *** La chaîne d'identification pour mapping sql: * com.lanhuigu.mybatis.map.usermainmapper est la valeur de l'attribut d'espace de nom Valeur de la balise de sélection du fichier usermainmapper.xml. Grâce à la valeur d'attribut ID de la balise de sélection, * le SQL à exécuter peut être trouvé à travers la combinaison de ces deux. * /// Exécutez la requête et renvoyez un objet utilisateur unique. Remarque: "com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainbyid" est la chaîne d'identification qui mappe SQL. User user = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainByid", 1); System.out.println (user.gesersername ());} enfin {session.close ();}}}Sortie de la console:
Pour l'exemple ci-dessus, dans le code de test:
User user = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainbyid", 1); System.out.println (user.gesersername ());Ce code est-il très désagréable à utiliser? Nous avons dit qu'il existe un moyen plus direct:
Ajoutez une interface de mappage à la carte de la structure du projet:
package com.lanhuigu.mybatis.map; import com.lanhuigu.mybatis.entity.user; interface publique userMainMapper {public user QueryUserainById (int id);}En même temps, modifiez le code de test comme suit:
package com.lanhuigu.mybatis; import java.io.ioexception; import java.io.inputStream; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; import org.apache.ibatis.session.sessionfactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import com.lanhugu.mybatis.entity.user; import com.lanhugu.mybatis.map.usermainmapper. {SqlSessionFactory SqlSessionFactory = null; // xml build sqlSessionFactory Factory instance sqlSession session = null; // obtenez l'objet SQLSession essayez {//1.mybatis de configuration du fichier de configuration, qui est placé sous ClassPath, qui est équivalent à une ressource de chaîne = "MYBATIS-CONFIG.XML"; Lisez le fichier de configuration MyBatis et créez l'instance d'usine SQLSessionFactory // ===== 2.1 Utilisez le chargeur de classe pour charger le fichier de configuration MyBatis (il charge également le fichier de mappage associé) // InputStream est = MyBatisTest.Class.getClassload (). Factory // SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (IS); // ===== 2.2 Utilisez la classe de ressources fournie par MyBatis pour charger le fichier de configuration de MyBatis (il charge également le fichier de mappage associé) // Reader Reader = Resources.getResourceAnder (ressource); // Créez la SQLSessionFactory Factory // SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); // ===== 2.3 Utilisez la classe de ressources fournie par MyBatis pour charger le fichier de configuration de MyBatis est le SQLSSessionfactFactory Nouveau SqlSessionFactoryBuilder (). Build (IS); // 3. Créer une SQLSESISIONSESSESSE qui peut exécuter SQL dans le fichier de mappage = SQLSessionFactory.OpenSession (); / *** La chaîne d'identification pour mapping sql: * com.lanhuigu.mybatis.map.usermainmapper est la valeur de l'attribut d'espace de nom Valeur de la balise de sélection du fichier usermainmapper.xml. Grâce à la valeur d'attribut ID de la balise de sélection, * le SQL à exécuter peut être trouvé à travers la combinaison de ces deux. * /// Exécutez la requête et renvoyez un objet utilisateur unique. Remarque: "com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainbyid" est la chaîne d'identification qui mappe SQL / * utilisateur utilisateur = session.Selectone ("com.lanhuigu.mybatis.map.usermainmapper.queryusermainïd", 1; Modifiez la pièce de requête précédente à:
UsermainMapper usermainMapper = session.getMapper (userMainMapper.class); utilisateur utilisateur = userMainMapper.QueryUserAmainById (1);
Utilisez une interface qui peut raisonnablement décrire les paramètres et les valeurs de retour pour une instruction donnée (par exemple, userMainMapper.class),
Non seulement vous pouvez exécuter un code plus clair et plus sûr maintenant, mais vous n'avez pas à vous soucier des littéraux et des moulages de chaînes sujettes aux erreurs.
Exécutez le code de test et l'effet est le même.
Emplacement de l'interface UsermainMapper:
Depuis que nous avons ajouté l'interface, MyBatis-Config.xml peut modifier la configuration de la partie du mappeur et mapper directement le fichier de package où se trouve l'interface UsermainMapper:
C'est-à-dire à
Modifier à
La configuration complète est la suivante et vous pouvez la vérifier en exécutant le code de test. Cette pratique est plus facile à maintenir et à gérer les cartes de manière unifiée:
<! -? xml version = "1.0" Encoding = "UTF-8"? -> <FIFIGIGURATION> <Environments default = "Development"> <Environment ID = "Development"> <transactionmanager type = "JDBC"> <DataSource Type = "Poolled"> <Property Name = "Driver" Value = "com.mysql.jdbc.Driver"> <propriété Name = "URL" Value = "JDBC: mysql: //192.168.200.12: 3306 / test_mybatis"> <propriété name = "username" value = "root"> <propriété name = "mot de passe" value = "root123"> </ propriété> </ propriété> </ propriété> </ datasource> Fichier usermainmapper.xml. Usermainmapper.xml est situé dans le package com.lanhuigu.mybatis.map, donc la ressource est écrite comme com / lanhugu / mybatis / map / usermainmapper.xml -> <! - <Mapper Resource = "com / lanhuigu / mybatis / map / usermainmapper.xml"> </ mybatis> <paquet name = "com.lanhuigu.mybatis.map"> </ package> </mappers> </figuration>
Comme ci-dessus, nous pouvons voir que peu importe comment nous jouons, SQL est-il toujours mappé dans usermainmapper.xml?
Cette implémentation est-elle unique? Dois-je utiliser XML?
Bien sûr que non. Si votre code ci-dessus est modifié et testé avec succès, faisons la dernière modification.
Au lieu d'utiliser usermainmapper.xml pour implémenter le mappage, nous utilisons des annotations Java pour implémenter la cartographie.
La principale modification est l'interface UsermainMapper.java, l'ajout d'une nouvelle méthode QueryUsermainByIdNew, et en utilisant des annotations pour implémenter la cartographie
Mappage d'interface auto-résolve Mybatis.
Interface UsermainMapper.java modifiée:
Package com.lanhuigu.mybatis.map; import org.apache.ibatis.annotations.param; import org.apache.ibatis.annotations.select; import com.lanhuigu.mybatis.entity.User; Interface publique interface (interd); Annotation * / @ select ("SELECT F_ID ID, F_USERNAME USERNAME, F_AGE AGE FROM T_USER_MAIN WHERE F_ID = $ {ID}") Public User QueryUserainByIdNew (@param ("id") int id);} Le code de test modifié, exécutez-le de la manière suivante:
package com.lanhuigu.mybatis; import java.io.ioexception; import java.io.inputStream; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; import org.apache.ibatis.session.sessionfactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import com.lanhugu.mybatis.entity.user; import com.lanhugu.mybatis.map.usermainmapper. {SqlSessionFactory SqlSessionFactory = null; // xml build sqlSessionFactory Factory instance sqlSession session = null; // obtenez l'objet SQLSession essayez {//1.mybatis de configuration du fichier de configuration, qui est placé sous ClassPath, qui est équivalent à une ressource de chaîne = "MYBATIS-CONFIG.XML"; Lisez le fichier de configuration MyBatis et créez l'instance d'usine SQLSessionFactory // ===== 2.1 Utilisez le chargeur de classe pour charger le fichier de configuration MyBatis (il charge également le fichier de mappage associé) // InputStream est = MyBatisTest.Class.getClassload (). Factory // SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (IS); // ===== 2.2 Utilisez la classe de ressources fournie par MyBatis pour charger le fichier de configuration de MyBatis (il charge également le fichier de mappage associé) // Reader Reader = Resources.getResourceAnder (ressource); // Créez la SQLSessionFactory Factory // SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); // ===== 2.3 Utilisez la classe de ressources fournie par MyBatis pour charger le fichier de configuration de MyBatis est le SQLSSessionfactFactory Nouveau SqlSessionFactoryBuilder (). Build (IS); // 3. Créer une SQLSESISIONSESSESSE qui peut exécuter SQL dans le fichier de mappage = SQLSessionFactory.OpenSession (); / *** La chaîne d'identification pour mapping sql: * com.lanhuigu.mybatis.map.usermainmapper est la valeur de l'attribut d'espace de nom Valeur de la balise de sélection du fichier usermainmapper.xml. Grâce à la valeur d'attribut ID de la balise de sélection, * le SQL à exécuter peut être trouvé à travers la combinaison de ces deux. * /// Exécutez la requête et renvoyez un objet utilisateur unique. Remarque: "com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainbyid" est la chaîne d'identification qui mappe SQL / * utilisateur utilisateur = session.Selectone ("com.lanhuigu.mybatis.map.usermainmapper.queryusermainïd", 1; session.getMapper (userMainMapper.class); utilisateur utilisateur = userMainMapper.QueryUserMainByIdNew (1); System.out.println (user.getUsername ());} enfin {session.close ();}}}Ce qui précède est la collection complète de MyBatis Introduction (2) vous présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!