Dans cet article, je présenterai les principes du cadre de MyBatis et le programme d'introduction de MyBatis pour réaliser l'addition, la suppression, la modification et l'inspection de l'utilisateur. Quels sont ses avantages et ses inconvénients et quelle relation existe entre Mybatis et Hibernate. J'espère que ce sera utile à mes amis. S'il y a des lacunes, donnez-moi quelques conseils.
Qu'est-ce que 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.
MyBatis est un excellent cadre de couche de persistance qui prend en charge SQL personnalisé, les procédures stockées et la cartographie avancée. MyBatis évite presque tous les paramètres de code JDBC et de paramètres manuels et les ensembles de résultats décimants. MyBatis utilise des XML ou des annotations simples pour configurer et cartographier les primitives, cartographier les interfaces et Java Pojos (Old Java objets simples) dans des enregistrements dans la base de données. Autrement dit, Mybatis est un cadre de couche persistant. MyBatis permet au programme de se concentrer sur SQL et de générer librement et de générer librement les instructions SQL qui répondent aux besoins via la méthode de mappage fournie par MyBatis. MyBatis peut automatiquement saisir la cartographie des paramètres d'entrée pour préparer la préparation et cartographier de manière flexible le résultat de la requête définie dans les objets Java.
Ensuite, comprenons le principe du cadre de Mybatis à travers une image:
Architecture du cadre Explication:
un. Fichier de configuration de chargement: la configuration provient de deux endroits, l'une est le fichier de configuration et l'autre est l'annotation du code Java. Les informations de configuration de SQL sont chargées dans des objets mappés de statement (y compris la configuration de mappage des paramètres passés, les instructions SQL exécutées et la configuration de mappage des résultats) et stockées en mémoire.
né Analyse SQL: Lorsque la couche d'interface API reçoit la demande d'appel, elle recevra l'ID du SLQ entrant et de l'objet entrant (peut être MAP ou Type de données de base). MyBatis trouvera le statement mappé correspondant basé sur l'ID du SQL, puis analysera le statement mappé basé sur l'objet paramètre entrant. Après l'analyse, vous pouvez obtenir les instructions et paramètres SQL à exécuter à la fin.
c. Exécution SQL: prenez le SQL final et les paramètres à la base de données pour exécuter et obtenez les résultats de l'exploitation de la base de données.
d. Mappage des résultats: convertissez les résultats de la base de données de fonctionnement en fonction de la configuration de mappage, qui peut être convertie en type de données HashMap, JavaBean ou de base, et renvoyer le résultat final.
Analyse du programme MyBatis pour démarrer
Ensuite, l'éditeur introduira les exigences spécifiques en combinaison avec la démo, et les exigences sont les suivantes:
Interroger les informations utilisateur en fonction de l'ID utilisateur;
Interroger les informations utilisateur floue sur la base du nom d'utilisateur;
Ajouter, supprimer et mettre à jour les utilisateurs.
La première étape consiste à créer divers packages et classes, le répertoire du projet est le suivant:
La deuxième étape consiste à écrire le contenu dans sqlmapconfig.xml et à configurer l'environnement en cours d'exécution, la source de données, les transactions, etc. de MyBatis. Le code ressemble à ceci:
<span style = "Font-Family: Comic Sans MS; FONT-SIZE: 18PX;"> <? xml version = "1.0" Encoding = "utf-8"?> <! Doctype Configuration public "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <! - Une fois le printemps intégré, la configuration des environnements sera abolie -> <Environments Default = "Development"> <! - Pool, géré par MyBatis -> <dataSource type = "Pollé"> <propriété name = "Driver" value = "$ {jdbc.driver}" /> <propriété name = "url" value = "$ {jdbc.url}" /> <propriété name = username "value =" $ {jdbc.Username} "/> <wom name = "wayon" " Value = "$ {jdbc.password}" /> </ dataSource> </ Environments> <! - Chargement du fichier de carte -> <mappers> ressource = "sqlmap / user.xml" /> </mappers> </ configuration> </ span>La troisième étape consiste à écrire le contenu dans user.java, comme indiqué ci-dessous:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> package cn.itcast.mybatis.po; Importer java.util.date; / ** * * <p> Title: User </p> * <p> Description: User Po </p> * @author ding GuoHua * @Date 31 juillet 2016 15:39:04 * @version 1.0 * / public class utilisateur {// Le nom d'attribut correspond aux champs de la table de base de données privative int id; Nom d'utilisateur de chaîne privée; // Nom d'utilisateur String privé Sexe; // Gender Date privée Anniversaire; // Adresse de chaîne privée d'anniversaire; // Adresse public int getID () {return id; } public void setid (int id) {this.id = id; } 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 Date getBirthday () {retour anniversaire; } public void SetBirthday (date d'anniversaire) {this.birthday = anniversaire; } public String getAddress () {return adresse; } public void setAddress (adresse de chaîne) {this.address = adresse; } @Override public String toString () {return "User [id =" + id + ", username =" + username + ", sexe =" + sexe + ", anniversaire =" + anniversaire + ", adresse =" + adresse + "]"; }} </span>Étape 4: Pour implémenter la fonction de l'ajout, de la suppression, de la modification et de la recherche, écrivez d'abord le contenu dans user.xml, comme indiqué ci-dessous:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> <? Xml Version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "- // Mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <! - L'espace de noms de noms est la fonction de la classification de la gestion SQL et de la compréhension de l'isolement de SQL Note Fichier -> <! - Exigences: rejeter les enregistrements de la table d'utilisateurs via ID -> <! - Exécuter l'ID de requête de la base de données: Identifiez le SQL dans le fichier de mappage encapsulent l'instruction SQL dans un objet mappé de statement, de sorte que l'ID est appelé le paramètre ID: spécifiez le type de paramètre d'entrée, IDI spécifie le paramètre # {} pour représenter un lieux de symbole de lieux #}: ID représente le paramètre pour représenter un lieux de symbole de lieux # #}. recevoir l'entrée et le nom du paramètre est ID. Si le paramètre d'entrée est un type simple, le nom du paramètre dans # {} peut être arbitraire et peut être de valeur ou d'autres noms ResultimeType: spécifiez le type de l'objet Java mappé du résultat de la sortie du SQL et sélectionnez Spécifier ResultType pour représenter l'objet Java mappé à un seul enregistrement. -> <select id = "FindUserById" ParameterType = "int" resultType = "cn.itcast.mybatis.po.user"> Sélectionner * dans l'utilisateur où id = # {valeur} </lect> <! - Fuzzy Query Informations utilisateur basée sur le nom de l'utilisateur, le type de résultat multiple a été renvoyé: le Specified est le type de mave java $ {} épisser la chaîne SQL et épisser les paramètres reçus dans SQL sans aucune modification. Utilisez $ {} pour épisser SQL, ce qui fait que SQL injecte $ {Value}: pour recevoir le contenu des paramètres d'entrée. Si le type entrant est un type simple, vous ne pouvez utiliser la valeur que dans $ {} -> <select id = "FindUserByName" paramètreType = "java.lang.string" SELECTTYPE = "CN.itcast.mybatis.po.user"> Sélectionner * parmi l'utilisateur où l'utilisateur est le nom d'utilisateur comme '% $ {valeur}%' </ SELECT> <! Le type de paramètre est POJO (y compris les informations de l'utilisateur) spécifiez le nom d'attribut du POJO dans # {}, recevez la valeur d'attribut de l'objet PoJo, MyBatis obtient la valeur d'attribut de l'objet via Ognl-> <insert id = "insertuser" ParamètreType = "CN.itcast.mybatis.po.User"> <! objet select last_insert_id (): Obtenez la valeur de clé principale enregistrée simplement insérée, ce qui est uniquement applicable à l'auto-incidence KeyProperty: Définissez la valeur de clé principale de la requête sur la propriété de l'objet spécifié par ParameterType KeyProperty = "id" Order = "After" resultType = "java.lang.integer"> SELECT LAST_INSER_ID () </ SelectKey> Insérez dans l'utilisateur (nom d'utilisateur, anniversaire, sexe, adresse) (# {username}, # {anniversaire}, # {sexe}, # #}} ivracy processus. Premièrement, obtenez la clé principale via UUID, définissez la clé principale sur l'attribut ID de l'objet utilisateur, puis deuxièmement, lorsque l'insert est exécuté, supprimez la valeur d'attribut ID de l'objet utilisateur -> <SelectKey KeyProperty = "ID" Order = "avant" ResultType = "Java.lang.String"> Sélectionner UUID () </ SELECKEKE> INSERT INTER (USERNAM valeur (# {nom d'utilisateur}, # {anniversaire}, # {sexe}, # {adresse}); </insert> <!-- To delete a user to delete a user based on the id, you need to enter the id value--> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id=#{id} </delete> <!-- To update user analysis based on the id: The id of the user needs to be passed in The user needs to be updated with the parameterType Spécifie l'objet utilisateur, y compris l'ID et la mise à jour des informations. Remarque: L'ID doit exister # {id}: Obtenez la valeur d'attribut ID de l'objet utilisateur d'entrée -> <Update id = "UpdateSer" ParameterType = "cn.itcast.mybatis.po.user"> Update User set username = # {username}, anniversaire = # {anniversaire}, Sex = # {sexe}, adresse = # # {adresse} WHERE ID = # # </ update </capper> </span>Étape 5: Écrivez la méthode spécifique comme suit:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> package cn.itcast.mybatis.first; Importer java.io.ioException; import java.io.inputStream; Importer java.util.date; Importer java.util.list; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlSessionFactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; Importer cn.itcast.mybatis.po.user; classe publique MyBatifiSFirst {// requête les informations utilisateur basées sur ID et obtenez un résultat d'enregistrement @Test public void finserUberByIdTest () lève ioException {// MyBatis Configuration File String Resource = "SQLMAPConfig.xml"; // Obtenir un flux de file de configuration InputStream InputStream = Resources.getResourceSstream (Resource); // Créer une usine de session et passer dans les informations de fichier de configuration mybatis sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder () .Build (InputStream); // Obtenez SQLSession via l'usine SQLSession SqlSession = SqlSessionFactory.OpenSession (); // Exploitez la base de données via SQLSession // Le premier paramètre: L'ID de l'instruction dans le fichier MAP est égal à = Namespace + "." + ID de l'instruction // Le deuxième paramètre: spécifiez le paramètre du type de paramètre de paramètre de la correspondance de la carte de la carte // SQLSession.Session SqlSession.Selectone ("Test.FindUserById", 1); System.out.println (utilisateur); // Libérez la ressource sqlSession.close (); } // Fuzzy Query La liste d'utilisateurs basée sur le nom d'utilisateur @Test public void finserUserByNameTest () lève IOException {// MyBatis Configuration File String Resource = "SQLMAPConfig.xml"; // Obtenez le fichier de configuration inputStream inputStream = Resources.getResourceSstream (ressource); // Créer une usine de session et passer dans les informations de fichier de configuration mybatis sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (InputStream); // Obtenez SQLSession via l'usine SQLSession SqlSession = SqlSessionFactory.OpenSession (); // L'utilisateur dans la liste dans la liste est le même que le type spécifié par le résultat allemand dans la liste de fichiers de mappage <server> list = sqlSession.SelectList ("test.finDuserByName", "xiao ming"); System.out.println (liste); sqlSession.close (); } public void inserTuserTest () lève ioException {// MyBatis Configuration File String Resource = "SQLMAPConfig"; // Obtenir un flux de file de configuration InputStream InputStream = Resources.getResourceSstream (Resource); // Créer une usine de session et passer dans les informations de fichier de configuration mybatis sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (InputStream); // Obtenez SQLSession via l'usine SQLSession SqlSession = SqlSessionFactory.OpenSession (); // insérer l'objet utilisateur utilisateur utilisateur = new user (); user.setUsername ("ding guohua"); user.setBirthday (new Date ()); user.setSex ("1"); user.setAddress ("anhui hefei"); // L'utilisateur de la liste et le type spécifié par le résultat dans le fichier de mappage sont toujours sqlSession.insert ("test.inserser", utilisateur); // soumettre des choses sqlSession.Commit (); // ferme la session sqlSession.close (); } // Supprimer les informations utilisateur basées sur id @test public void DeleteUserTest () lève ioException {// MyBatis Configuration File String Resource = "SQLMAPConfig.xml"; // Obtenir un flux de file de configuration InputStream InputStream = Resources.getResourceSstream (Resource); // Créer une usine et passer dans les informations de fichier de configuration mybatis sqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder (). Build (inputStream); // Obtenez SQLSession via l'usine SQLSession SqlSession = SqlSessionFactory.OpenSession (); // passant ID entrant Supprimer l'utilisateur sqlSession.Delete ("test.deleteUser", 39); // soumettre des choses sqlSession.Commit (); // ferme la session sqlSession.close (); } // Mettre à jour les informations de l'utilisateur @Test public void UpdateUserTest () lève IOException {// MyBatis Configuration File String Resource = "SQLMAPConfig.xml"; // Obtenir un flux de file de configuration InputStream InputStream = Resources.getResourceSstream (Resource); // Créer une usine de session et passer dans les informations de fichier de configuration mybatis sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder () .Build (InputStream); // Obtenez SQLSession via l'usine SQLSession SqlSession = SqlSessionFactory.OpenSession (); // Mettre à jour l'utilisateur utilisateur = new user (); // Mettre à jour id user.setid (41); user.setUsername ("ding guohua"); user.setBirthday (new Date ()); user.setSex ("2"); user.setAddress ("anhui hefei"); sqlSession.update ("test.updateUser", utilisateur); // commit la transaction sqlSession.Commit (); // Fermer ses session sqlSession.close (); }} </span>Pour les avantages et les inconvénients de Mybatis
avantage:
un. Facile à démarrer et à maîtriser.
né SQL est écrit en XML, qui facilite la gestion et l'optimisation unifiées.
c. Découpler SQL et code de programme.
d. Fournir des balises de mappage pour prendre en charge la cartographie des relations sur le terrain ORM entre les objets et les bases de données
e. Fournir des étiquettes de cartographie des relations d'objet pour soutenir la construction et l'entretien des relations d'objet
f. Fournir des balises XML et supporter l'écriture dynamique SQL.
défaut:
un. La charge de travail SQL est très élevée, surtout lorsqu'il existe de nombreux champs et de nombreuses tables connexes.
né SQL dépend de la base de données, entraînant une mauvaise portabilité de la base de données.
c. Étant donné que l'ID de balise dans le XML doit être unique, les méthodes de DAO ne prennent pas en charge la surcharge de méthode.
d. La couche DAO est trop simple et la charge de travail de l'assemblage des objets est relativement grande.
e. Une mauvaise utilisation du cache peut facilement générer des données sales.
Comparaison entre mybatis et hibernate
Similitudes: HiberNate et MyBatis peuvent générer SessionFactory à partir du fichier de configuration XML via SessionFactoryBuilder, puis générer une session à partir de sessionfactroy. Enfin, la session commence à exécuter des choses et des instructions SQL. Les cycles de vie de SessionFactoryBuilder, SessionFactory et Session sont presque les mêmes.
Différences:
Mybatis: petit, pratique, efficace, simple, direct, semi-automatique;
Hibernate: puissant, pratique, efficace, complexe, circonstancier, entièrement automatique;
Mybatis:
un. Simple pour démarrer, l'apprendre et l'utiliser dès que possible. Il fournit une fonction de liaison automatique d'objets pour les requêtes de base de données et poursuit une grande expérience d'utilisation SQL. Il est parfait pour des projets qui n'ont pas de tels exigences de modèle d'objet.
né Une optimisation SQL plus détaillée peut être effectuée et les champs de requête peuvent être réduits.
c. L'inconvénient est que le cadre est encore relativement simple et que les fonctions sont toujours manquantes. Bien que le code de liaison des données soit simplifié, l'intégralité de la requête de la base de données sous-jacente doit en fait être écrite par elle-même, la charge de travail est relativement grande et il n'est pas facile de s'adapter à la modification rapide de la base de données.
d. Le mécanisme de mise en cache secondaire est pauvre.
hiberner:
un. Fonctions fortes, bonne base de données non pertinents et capacités de cartographie O / R solides. Si vous êtes tout à fait compétent en hibernate et que vous encapslez correctement l'hibernate, alors l'ensemble du code de couche de persistance de votre projet sera assez simple, le code qui doit être écrit est très élevé, la vitesse de développement est très rapide et elle est très cool.
né Il existe un meilleur mécanisme de mise en cache secondaire et la mise en cache tierce peut être utilisée.
c. L'inconvénient est que le seuil d'apprentissage n'est pas faible, et vous devez y être compétent. Comment concevoir la cartographie O / R, comment équilibrer le modèle de performances et d'objets, et comment utiliser Hibernate Well nécessite votre expérience et votre capacité pour être fortes.
Permettez-moi de vous donner une métaphore vivante:
Mybatis: Les outils mécaniques sont faciles à utiliser et peuvent être utilisés dès que possible, mais le travail doit encore être fait par vous-même, mais les outils sont vivants, alors comment les faire dépend de moi.
Hibernate: Robot intelligent, mais il est très coûteux de le développer (apprentissage, compétence) et travailler peut s'en débarrasser, mais seulement ce qu'il peut faire.
Message de l'éditeur: Dans ce billet de blog, l'éditeur a principalement brièvement introduit les connaissances de base de Mybatis, y compris une simple démo d'ajout, de supprimer, de modifier et de rechercher, les avantages et les inconvénients de Mybatis, et la comparaison entre HiberNate et Mybatis. Les similitudes et les différences entre elles. Mybatis signifie simplement un cadre de couche de persistance. MyBatis permet au programme de se concentrer sur SQL et de générer librement et de générer librement les instructions SQL qui répondent aux besoins via la méthode de mappage fournie par MyBatis. MyBatis peut saisir automatiquement les paramètres d'entrée à la préparation et cartographier de manière flexible le résultat de la requête définie dans des objets Java.
Ce qui précède est le tutoriel d'introduction pour l'aperçu du principe MyBatis introduit par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!