MyBatis est un excellent cadre de couche de persistance qui prend en charge les requêtes SQL simples, les procédures stockées et la cartographie avancée. MyBatis élimine les paramètres manuels de presque tous les code et paramètres JDBC et l'encapsulation de recherche de l'ensemble de résultats. MyBatis peut utiliser du XML ou des annotations simples pour la configuration et la cartographie originale, les interfaces de cartographie et les Pojos de Java (Old Java objets) en enregistrements dans la base de données.
Cartographie un à un
Dans la vie, il existe encore des exemples individuels, tels que les étudiants et les cartes d'identité, ou dans notre pays, le système de monogamie est mis en œuvre. Ensuite, nous n'avons qu'une seule carte d'identité pour les étudiants et les cartes d'identité, et bien sûr, il n'y a qu'une seule carte d'identité pour chaque carte d'identité.
Script de base de données:
- Supprimer la base de données de la base de données si existe des mybaits; - Créer la base de données de la base de données Créer une base de données s'il n'est pas existant le jeu de caractères par défaut MyBatis UTF8; - Sélectionnez la base de données Utiliser MyBatis; - Supprimer la table de drop TABLE DE DONNÉE IF EXISTE Student; Drop Table If Exist Card, CONSTRAINT TABLE DE DONNÉ Créer des tableaux de table (SID INT (255), Sname Varchar (32), SCID INT (255), Contrainte PK_SID Primary Key (SID), Contrainte FK_Scid Foreign Key (SID) Références Card (CID)); - Ajouter un insert de données de test (CID, NUM) valeurs (1, «haha», 1);
Créer une nouvelle classe one2one.card.java
Package One2One; Importer Java.io.Serializable; / *** Card d'identification * @Author Administrator ** / @ SupressWarnings ("Serial") La carte publique implémente Serializable {private Integer CID; Private String num {return num;} public void setnum (string num) {this.num = num;}}Créez une nouvelle classe One2one.Student.java
Package One2One; Importer Java.io.Serializable; / *** Student * @Author Administrator ** / @ SuppressWarnings ("Serial") Public Class Implémentez Série Interidable {Return Integer Sid;} Public Void SetSid (INTERG {return sname;} public void setsName (String sname) {this.sname = sname;} public carte getcard () {return card;} public void setcard (carte carte) {this.card = carte;}}Créez un nouveau fichier cardmapper.xml sous un package One2One
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis"> <toultMAP type = "one2one.card" id = "cardmap"> <id chronn = "cid" propriété = "cid" /> <result Column = "num" property = "num" /> <setultMap> </ Mapper>
De même, créez un nouveau fichier StudentMapper.xml sous le package One2One
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis"> <résultatmap "> <masper namespace =" StudentNamespace "> type = "one2one.student" id = "étudiantmap"> <id chronn = "sid" property = "sid" /> <résultat column = "sname" property = "sname" /> <! - n'écrivez pas les champs associés -> </ résultatmap> <select id = "findbyid" ParameterType = "Integer" ResultMap = "StudentMap"> Sélectionner S.Sid, s.sname, C.Cid, C.NUM TRUS S, carte cwhere s.scid = c.cid et s.sid = # {sid} </lect> </caper>Créez un nouveau fichier mybatis.cfg.xml sous SRC et incluez des fichiers StudentMapper.xml et Cardmapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // Mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> <! Default = "MySQL_Developer"> <! - Connect MySQL Environment Informations -> <Environment ID = "MySQL_DELEVELOPER"> <! - MyBatis utilise JDBC Transaction Manager -> <TransactionManager Type = "JDBC" /> <! - MyBatis utilise la connexion de la connexion pour obtenir des objets de connexion -> <datasource type = " La base de données -> <propriété name = "Driver" value = "com.mysql.jdbc.driver" /> <propriété name = "url" value = "jdbc: mysql: //127.0.0.1: 3306 / mybatis" /> <propriété name = "username" value = "root" /> <propriété nom = "mot de passe" Value = "MySqladmin" /> <DataSource> </ Environment> <! - Connectez Oracle Environment Information -> <Environment ID = "Oracle_Developer"> <! - MyBatis utilise JDBC Transaction Manager -> <TransactionManager Type = "JDBC" /> <! - MyBatis utilise le pool de connexion pour obtenir des objets de connexion -> <Datasource Type = "Polasts"> <! Pour interagir avec les bases de données -> <propriété name = "Driver" value = "oracle.jdbc.driver.oracledriver" /> <propriété name = "url" value = "jdbc: oracle: mince: @ 127.0.0.1: 1521: Orcl" /> <propriété name = "username" value = "scott" /> <propriété name = "mot de passe" Value = "Tiger" /> </ DataSource> </ Environment> </ Environments> <! - Chargement du fichier de carte -> <mappers> <mapper ressource = "One2One / CardMapper.xml" /> <Mappen Resource = "One2One / StudentMapper.xml" /> </mappers> </ Configuration>
Créez une nouvelle classe d'outils MyBatisUtil.java Classe sous le package Util
package util; importer java.io.ioexception; import java.io.reader; import java.sql.connection; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.sse.Sessionfactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; classe publique MyBatisUtil {private static threadlocal <sqlSession> threadLocal = new ThreadLocal <sqlSession> (); Public Static SqlSessionFactory SqlSessionFactory; // Private Construction Method Mybatitil () {} src / mybatis.cfg.xmlstatic {try {Reader Reader = Resources.getResourCeasReader ("MyBatis.cfg.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader);} Catch (ioException e) {E.PrintStackTrace (); SqlSession * @ return * / public static sqlSession getSQLSession () {// obtenir un objet sqlSession de l'actuel threadsqlSession sqlSession = threadLocal.get (); if (sqlSession == null) {if (sqlsessionfactory. = null) {SqlSession = sqlsessionfactory. SQLSession est liée à la threadthaReadlocal.set actuelle actuelle (SQLSession);}} RETOUR SQLSESSION;} / *** Close SqlSession et séparé du thread actuel * / public static void closeSQSession () {// Get SqlSession Objet if (sqlSession! = null) {// Fermer un objet SqlSession sqlSession.close (); // séparez la relation entre le thread actuel et SqlSession Threadlocal.remove ();}} // Test public static void main (String [] args) {sqlsession sqlsession = MyBatitil.getsSqlsession ();) sqlSession.getConnection (); System.out.println (Conn! = NULL? "Connexion réussie": "Connexion Échec");}}Créez une nouvelle classe de couche de persistance StuentCarddao.java Classe
Package One2One; import org.apache.ibatis.session.sqlSession; import org.junit.test; import util.mybatisutil; / *** couche de persistance * @Author Administrator ** / public class Studentcarddao {/ *** question d'étudiant de la carte publique * lance une exception {sqlSession sqlSession = null; try {sqlSession = mybatisUtil.getsqlSession (); return SqlSession.Selectone ("StudentNamespace.FindById", id);} Catch (Exception e) {e.printStStackTrace (); Throw E;} Enfin {MyBatisUtil.ClosesQlSession ();}} // Test Query Student No. 1's Information and Id Card Informations @TestPublic void TestFindById () lève l'exception {StudentCarddao Dao = New StudentCarddao (); étudiant étudiant = dao.findById (1); System.out.println (Student.getSid () + ":" + Student.getsName ()}}Pour le moment, nous ne pouvons interroger le nom de l'étudiant n ° 1, mais nous ne pouvons pas interroger son numéro d'identité, car la valeur de l'attribut de la carte pour le moment est nul, qui peut être vue de StudentMapper.xml
<select id = "findbyid" ParameterType = "Integer" resultMap = "StudentMap">
Lorsque Mybatis analyse cette phrase, elle ne peut encapsuler les données de la requête en SID et en sname, alors que dois-je faire?
Dans StudentMapper.xml
<resultmap type = "one2one.card" id = "cardmap"> <id colonnen = "cid" propriété = "cid" /> <result Column = "num" propriété = "num" /> <result Column = "num" /> </ resultmap>
Augmenter
<! - Introduire des informations de mappage dans la propriété du fichier cardmapper.xml représente les propriétés associées de l'étudiant -> <association propriété = "card" resultMap = "cardNamespace.cardmap" />
Ensuite, le contenu complet de StudentMapper.xml pour le moment est le suivant:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis"> <résultatmap "> <masper namespace =" StudentNamespace "> type = "one2one.student" id = "étudiantmap"> <id chronn = "sid" propriété = "sid" /> <résultat chronn = "sname" propriété = "sname" /> <! - introduire des informations de mappage dans cardmapper.xml la propriété représente les propriétés associées de l'étudiant -> <association propriété = "card" resultemap = "cardnamepace.cardmap" /> </ ResultMAP> <SECTURMAGE " id = "findbyid" ParameterType = "Integer" resultMap = "StudentMap"> SELECT S.SID, S.SNAME, C.CID, C.NUM From Student S, Card Cwhere S.Scid = C.Cid et S.Sid = # {sid} </lect> </caper>Maintenant, vous pouvez tester votre numéro d'identification d'étudiant
Modifiez la méthode de test de la classe StuentCarddao.java de classe de persistance
// TestPublic void testFindById () lève une exception {StudentCarddao dao = new StudentCarddao (); étudiant étudiant = dao.findbyid (1); System.out.println (Student.getSid () + ":" + Student.getsname () + ":" + student.getcard (). Getnum ());}De la même manière
Ajoutez une méthode pour interroger les informations sur les élèves "haha" et les informations sur la carte d'identité dans la classe StudentDao.java
/ *** interroge les informations et les informations sur la carte d'identité des étudiants "haha" * @param nom * @ return * @throws exception * / public étudiant findbyName (nom de chaîne) lève une exception {sqlSession sqlSession = null; try {sqlSession = MybatisUtil.getsqlSession (); return SqlSession.Selectone ("StudentNamespace.Findy", nom); (Exception e) {e.printStackTrace (); lancer e;} enfin {mybatisutil.closesqlSession ();}}Et ajouter des méthodes de test
// testpublic void testFindByName () lève une exception {StudentCarddao dao = new StudentCarddao (); étudiant étudiant = dao.findByName ("haha"); System.out.println (Student.getSid () + ":" + student.getsName () + ":" + Student.getCard (). Getnum ();}Bien sûr, si vous le testez maintenant, vous mourrez misérablement parce que vous n'avez pas configuré <lelect> dans le fichier StudentMapper.xml, alors ajoutez <lelect> des informations de configuration au fichier StudentMapper.xml.
<select id = "findByName" ParameterType = "String" resultMap = "StudentMap"> SELECT S.SID, S.SNAME, C.CID, C.NUM FROM Student S, Card Cwhere S.Scid = C.Cid et S.Sname = # {Sname} </ELECT>De cette façon, le test réussira. La mission est terminée.
Le code complet est le suivant:
Scripts de base de données MySQL
- Supprimer la base de données de la base de données si existe des mybaits; - Créer la base de données de la base de données Créer une base de données s'il n'est pas existant le jeu de caractères par défaut MyBatis UTF8; - Sélectionnez la base de données Utiliser MyBatis; - Supprimer la table de drop TABLE DE DONNÉE IF EXISTE Student; Drop Table If Exist Card, CONSTRAINT TABLE DE DONNÉ Créer des tableaux de table (SID INT (255), Sname Varchar (32), SCID INT (255), Contrainte PK_SID Primary Key (SID), Contrainte FK_Scid Foreign Key (SID) Références Card (CID)); - Ajouter un insert de données de test (CID, NUM) valeurs (1, «haha», 1);
Classe d'outils Mybatis.java Classe
package util; importer java.io.ioexception; import java.io.reader; import java.sql.connection; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.sse.Sessionfactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; classe publique MyBatisUtil {private static threadlocal <sqlSession> threadLocal = new ThreadLocal <sqlSession> (); Public Static SqlSessionFactory SqlSessionFactory; // Private Construction Method Mybatitil () {} src / mybatis.cfg.xmlstatic {try {Reader Reader = Resources.getResourCeasReader ("MyBatis.cfg.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader);} Catch (ioException e) {E.PrintStackTrace (); SqlSession * @ return * / public static sqlSession getSQLSession () {// obtenir un objet sqlSession de l'actuel threadsqlSession sqlSession = threadLocal.get (); if (sqlSession == null) {if (sqlsessionfactory. = null) {SqlSession = sqlsessionfactory. SQLSession est liée à la threadthaReadlocal.set actuelle actuelle (SQLSession);}} RETOUR SQLSESSION;} / *** Close SqlSession et séparé du thread actuel * / public static void closeSQSession () {// Get SqlSession Objet if (sqlSession! = null) {// Fermer un objet SqlSession sqlSession.close (); // séparez la relation entre le thread actuel et SqlSession Threadlocal.remove ();}} // Test public static void main (String [] args) {sqlsession sqlsession = MyBatitil.getsSqlsession ();) sqlSession.getConnection (); System.out.println (Conn! = NULL? "Connexion réussie": "Connexion Échec");}}fichier mybatis.cfg.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // Mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> <! Default = "MySQL_Developer"> <! - Connect MySQL Environment Informations -> <Environment ID = "MySQL_DELEVELOPER"> <! - MyBatis utilise JDBC Transaction Manager -> <TransactionManager Type = "JDBC" /> <! - MyBatis utilise la connexion de la connexion pour obtenir des objets de connexion -> <datasource type = " La base de données -> <propriété name = "Driver" value = "com.mysql.jdbc.driver" /> <propriété name = "url" value = "jdbc: mysql: //127.0.0.1: 3306 / mybatis" /> <propriété name = "username" value = "root" /> <propriété nom = "mot de passe" Value = "MySqladmin" /> <DataSource> </ Environment> <! - Connectez Oracle Environment Information -> <Environment ID = "Oracle_Developer"> <! - MyBatis utilise JDBC Transaction Manager -> <TransactionManager Type = "JDBC" /> <! - MyBatis utilise le pool de connexion pour obtenir des objets de connexion -> <Datasource Type = "Polasts"> <! Pour interagir avec les bases de données -> <propriété name = "Driver" value = "oracle.jdbc.driver.oracledriver" /> <propriété name = "url" value = "jdbc: oracle: mince: @ 127.0.0.1: 1521: Orcl" /> <propriété name = "username" value = "scott" /> <propriété name = "mot de passe" Value = "Tiger" /> </ DataSource> </ Environment> </ Environments> <! - Chargement du fichier de carte -> <mappers> <mapper ressource = "One2One / CardMapper.xml" /> <Mappen Resource = "One2One / StudentMapper.xml" /> </mappers> </ Configuration>
Card.java et étudiant.java
Package One2One; Importer Java.io.Serializable; / *** Card d'identification * @Author Administrator ** / @ SupressWarnings ("Serial") La carte publique implémente Serializable {private Integer CID; Private String num {return num;} public void setNum (String num) {this.num = num;}} package one2one; import java.io.serializable; / *** étudiant * @author administrateur ** / @ supresswarnings ("serial") public classe publique implémente série {private Integer Sid; private String sname; carte privée; carte de carte publique; Card de la carte publique;) GetSid () STRY; void setSid (entier sid) {this.sid = sid;} public String getSname () {return sname;} public void setsName (String Sname) {this.sname = sname;} public carte getcard () {return carte;} public void setCard (carte de carte) {this.card = card;}}Fichier de mappage de Card.java Fichier CardMapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis"> <toultMAP type = "one2one.card" id = "cardmap"> <id chronn = "cid" propriété = "cid" /> <result Column = "num" property = "num" /> <setultMap> </ Mapper>
Le fichier de mappage correspondant au fichier student.java classe étudiantmapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis"> <résultatmap "> <masper namespace =" StudentNamespace "> type = "one2one.student" id = "étudiantmap"> <id chronn = "sid" propriété = "sid" /> <résultat chronn = "sname" propriété = "sname" /> <! - introduire des informations de mappage dans cardmapper.xml la propriété représente les propriétés associées de l'étudiant -> <association propriété = "card" resultemap = "cardnamepace.cardmap" /> </ ResultMAP> <SECTURMAGE " id = "findbyid" ParameterType = "Integer" resultMap = "StudentMap"> SELECT S.SID, S.SNAME, C.CID, C.NUM FROM Student S, Card C.S.Sid = C.Cid et S.Sid = # {Sid} </ Select> <SELECT ID = "SELECTBYNAM S.Sid, S.Sname, C.Cid, C.Num From Student S, Card C Where S.Scid = C.Cid et S.Sname = # {Sname} </ELECT> </MAPPER>Classe de couche de persistance Studentcarddao.java Classe
Package One2One; import org.apache.ibatis.session.sqlSession; import org.junit.test; import util.mybatisutil; / *** couche de persistance * @Author Administrator ** / public class Studentcarddao {/ *** question d'étudiant de la carte publique * lance une exception {sqlSession sqlSession = null; try {sqlSession = mybatisUtil.getsqlSession (); return SqlSession.Selectone ("StudentNamespace.FindById", id);} Catch (Exception e) {e.printStStackTrace (); Throw E;} Enfin {MyBatisUtil.ClosesQlSession ();}} / *** Query "HAHA" Informations d'étudiant et Informations sur la carte d'identité * @param name * @ return * @throws exception * / public étudiant findByName (String Name) lève exception {SqlSession SqlSession = null;); SqlSession.Selectone ("StudentNamespace.FindByName", nom);} catch (exception e) {e.printStackTrace (); Throw E;} enfin {MyBatisUtil.closesqlSession ();}} // Test Query Student No. 1 StudentCarddao (); étudiant étudiant = dao.findById (1); System.out.println (Student.getSid () + ":" + Student.getsName () + ":" + Student.getCard (). = new StudentCardDao (); étudiant étudiant = dao.findByName ("haha"); System.out.println (student.getSid () + ":" + student.getsname () + ":" + student.getcard (). getNum ());}}Ce qui précède est le premier tutoriel sur MyBatis un à un mappage 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!