Mybatis adalah kerangka kerja lapisan kegigihan yang sangat baik yang mendukung pertanyaan SQL biasa, prosedur tersimpan dan pemetaan lanjutan. Mybatis menghilangkan pengaturan manual hampir semua kode dan parameter JDBC dan enkapsulasi pencarian dari set hasil. Mybatis dapat menggunakan XML sederhana atau anotasi untuk konfigurasi dan pemetaan asli, antarmuka pemetaan dan pojos Java (objek java tua biasa) ke dalam catatan dalam database.
Pemetaan satu-ke-satu
Dalam kehidupan, masih ada contoh satu-ke-satu, seperti siswa dan kartu ID, atau di negara kita, sistem monogami diimplementasikan. Kemudian kami hanya memiliki satu kartu ID untuk siswa dan kartu ID, dan tentu saja hanya ada satu kartu ID untuk setiap kartu ID.
Skrip database:
-- Delete database drop database if exists mybaits;-- Create database create database if not exists mybatis default character set utf8;-- Select database use mybatis;-- Delete data table drop table if exists student ;drop table if exists card;-- Create data table create table card(cid int(255), num varchar(18), constraint pk_cid primary key (cid)); create table student(sid int(255),sname varchar(32),scid int(255),constraint pk_sid primary key (sid),constraint fk_scid foreign key (sid) references card(cid));-- Add test data insert into card (cid,num) values(1,'123456789012345678');insert into student (sid,sname,scid) nilai (1, 'haha', 1);
Buat kelas One2One.card.java yang baru
package one2one;import java.io.Serializable;/*** ID card* @author Administrator**/@SuppressWarnings("serial")public class Card implements Serializable{private Integer cid;private String num;public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public String getNum() {return num;} public void setNum (string num) {this.num = num;}}Buat kelas One2One.student.java baru
package one2one;import java.io.Serializable;/*** Student* @author Administrator**/@SuppressWarnings("serial")public class Student implements Serializable{private Integer sid;private String sname;private Card card;public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid = sid;}public String getSname() {return sname;} public void setSname (string sname) {this.sname = sname;} kartu publik getCard () {return card;} public void setCard (kartu kartu) {this.card = card;}}Buat file cardmapper.xml baru di bawah paket One2One
<? 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"> <mapper naPape = "cardmace" <papper = "mapper = type = "One2One.card" id = "cardmap"> <id kolom = "cid" properti = "cid"/> <column column = "num" properti = "num"/> <RancesMap> </mapper>
Demikian pula, buat file StudentMapper.xml baru di bawah paket One2One
<? 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"> <mapper naPape = "mapperpace =" mapper "> <mapper =" mapper "> <mapper =" mapper "> type = "one2one.student" id = "studentmap"> <id kolom = "sid" properti = "sid"/> <colom hasil = "sname" properti = "sname"/> <!-jangan menulis bidang terkait-> </resultMap> <pilih id = "findbyid" parameterType = "integer" resultsmap = "studentsmap" sm, c. cwhere s.scid = c.cid dan s.sid = #{sid} </select> </mapper>Buat file mybatis.cfg.xml baru di bawah src dan sertakan file studermapper.xml dan cardmapper.xml
<? 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> <! default = "mysql_developer"> <!-menghubungkan informasi lingkungan mySQL-> <lingkungan id = "mysql_developer"> <!-mybatis menggunakan jdbc transaction manager-> <transactionManager type = "jdbc"/> <!-mybatis menggunakan koneksi pooling untuk mendapatkan objek koneksi-"jdbc"/> <! Database -> <nama properti = "driver" value = "com.mysql.jdbc.driver"/> <name properti = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/> <nama properti = "nama pengguna" value = "root"/> <a name = " value = "mysqladmin"/> <dateSource> </urvence> <!-menghubungkan informasi lingkungan oracle-> <lingkungan id = "oracle_developer"> <!-mybatis menggunakan jdbc transaction manager-> <TransactionManager type = "jdbc"/<!-mybatis menggunakan koneksi pooling untuk mendapatkan objek koneksi-"jdbc"/<!-mybatis menggunakan koneksi pooling koneksi untuk koneksi objek koneksi-"jdbc"/<"-mybatis menggunakan koneksi pooling koneksi untuk koneksi objek Koneksi-" JDBC "/<" interacting with databases --><property name="driver" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/><property name="username" value="scott"/><property name="password" value = "Tiger"/> </dateSource> </vervence> </urveperments> <!-Memuat file peta-> <phappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2One/studermapper.xml"/> </mappers> </configuration>
Buat kelas alat baru mybatisutil.java di bawah paket util
Paket util; impor java.io.ioException; impor java.io.reader; impor java.sql.connection; impor org.apache.iathis.io.Resources; impor org.apache.atis.session.Session; org.apache.ibatis.Session.SQLSessionFactoryBuilder; kelas publik mybatisutil {private static Threadlocal <sqlsession> threadlocal = threadlocal baru <sqlsession> (); Metode public static SQLSessionFactory SQLSESSESSESSESTORY (SQLSESSION;//MODOK PRIBRIM SQLSESSESTORY SQLSESTORY SQLSESSESTORYFACTORY;//MODOK PRICORIC PRivATECICORY SQLSESSESTORY SQLSESSESTORY; src /mybatis.cfg.xmlstatic {try {reader reader = Resources.getResourCeasReader ("mybatis.cfg.xml"); sqlSessionFactory = oMerPrace {buile ();}} {} {ioExceptoryBuilder (ioExceptoryBuilder (). SQLSession* @return*/public static SQLSession getsqlSession () {// Dapatkan objek SQLSession dari ThreadSQLSession sqlsession = threadlocal.get (); if (sqlsession == null) {if (sqlSessionFacpactory! = Null) {sqlsession (sqlSesesicesesicy. SQLSession terikat pada threadthreadlocal.set saat ini (sqlsession);}} mengembalikan sqlsession;}/*** Tutup sqlsession dan terpisah dari utas saat ini*/public static void closeesQLSession () {// dapatkan objek sqlsession dari thread sqlsession () {// dapatkan objek sqlsession dari sqlsession sqlsession () {// dapatkan sqlsession dari thread sqlsession sqlsession = sqlSession = sqlSession = sqlSession = SQLSESSESSESSESESSIESS = SQLSESSESSESSESESSION =) Objek SQLSESSESSION (SQLSESSESSESSION () if (sqlsession! = null) {// tutup objek sqlsession sqlsession.close (); // pisahkan hubungan antara utas saat ini dan sqlsession threadlocal.remove ();}} // uji public static Main (string [] args) {SQLSESSESSESESSION = MyBaTSESSESSERE = MyBaSesesi = MyBSESSESSESSESSESSESSET = MYBSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSEM sqlSession.getConnection (); System.out.println (conn! = null? "Koneksi berhasil": "koneksi gagal");}}Buat kelas Lapisan Kegigihan baru StoruentCarddao.java kelas
Paket One2One; Impor org.apache.Ibatis.Session.SqlSession; impor org.junit.test; import util.mybatisutil;/*** Lapisan Persistensi*@Author Administrator **/Public Class StudentCardDao {/*** Query No. Informasi No. 1 Informasi Kartu dan ID ID ID* @Public* @Ukuran @ @*** Informasi Student No. Pengecualian {SQLSession SQLSession = null; coba {sqlSession = mybatisutil.getSqlSession (); return sqlSession.selectone ("studentnamespace.findbyid", id);} catch (pengecualian e) {e.printstackace (); throw e;} Akhirnya {mybatisutil.closesqlSession ();}} // uji kueri Informasi No. 1 Informasi kartu dan kartu ID @testpublic void testfindbyid () melempar pengecualian {studentcarddao dao = studentcarddao baru (); siswa siswa = dao.findbyid (1); System.out.println (student.getsid ()+":"+student.getSname ()}}Pada saat ini, kami hanya dapat menanyakan nama siswa No. 1, tetapi kami tidak dapat meminta nomor identitasnya, karena nilai atribut kartu saat ini adalah NULL, yang dapat dilihat dari StudentMapper.xml
<Pilih id = "findById" parameTerType = "integer" resultMap = "studentmap">
Ketika mybatis menguraikan kalimat ini, itu hanya bisa merangkum data kueri ke Sid dan Sname, jadi apa yang harus saya lakukan?
Di studermapper.xml
<resultMap type = "One2One.card" id = "cardmap"> <id kolom = "cid" properti = "cid"/> <column column = "num" properti = "num"/> <hasil kolom = "num"/> </resultMap>
Meningkatkan
<!-Perkenalkan informasi pemetaan di properti file cardmapper.xml mewakili properti terkait siswa-> <asosiasi properti = "card" resultMap = "cardnamespace.cardmap"/>
Kemudian konten lengkap dari studentmapper.xml saat ini adalah sebagai berikut:
<? 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"> <mapper naPape = "mapperpace =" mapper "> <mapper =" mapper "> <mapper =" mapper "> type="one2one.Student" id="studentMap"><id column="sid" property="sid"/><result column="sname" property="sname"/><!-- Introduce mapping information in CardMapper.xml file property represents the associated properties of Student --><association property="card" resultMap="cardNameSpace.cardMap"/></resultMap><select id="findById" ParameterType = "integer" resultMap = "studentmap"> pilih s.sid, s.sname, c.cid, c.num dari Siswa, kartu cwhere s.scid = c.cid dan s.sid = #{sid} </pilih> </mapper>Sekarang Anda dapat menguji nomor ID siswa Anda
Ubah metode uji kelas Kegigihan Lapisan StoruTCarddao.java menjadi
// testpublic void testFindById () melempar Exception {StudentCarddao dao = StudentCardDao baru (); Student Student = dao.findbyId (1); System.out.println (student.getsid ()+":"+GetSname ()+":"+Student.getCard ()+":"+GetSname ()+":"+Student.getCard ()+":).Demikian pula
Tambahkan metode untuk meminta informasi "haha" dan informasi kartu ID di kelas studentdao.java
/*** Permintaan Informasi dan Informasi Kartu ID dari "Haha" Siswa* @param nama* @return* @throws Exception*/siswa publik findbyname (nama string) melempar pengecualian {sqlsession sqlsession = null; coba {sqlsession = mybatisil.getsqlSession (); return sqlsession = mybatisil.getsqlSession (); return sqlsession (sqlsession = mybatisil.getsqlSession (); return sqlsesesion (return sqlsession. (Pengecualian e) {e.printstacktrace (); lempar e;} akhirnya {mybatisutil.closesqlsession ();}}Dan tambahkan metode tes
// testpublic void testfindbyname () melempar pengecualian {studentcarddao dao = StudentCardDao baru (); Student Student = dao.findbyname ("haha"); System.out.println (student.getsid ()+":"+student.getSname ()+":"+) () () () () (student.getsname ()+":)Tentu saja, jika Anda mengujinya sekarang, Anda akan mati secara menyedihkan karena Anda tidak mengonfigurasi <CILT> di file studentmapper.xml, jadi tambahkan informasi konfigurasi <Colly> ke file studentmapper.xml.
<pilih id = "findByname" parameTerType = "string" resultMap = "studentmap"> pilih s.sid, s.sname, c.cid, c.num dari Siswa S, kartu chere s.scid = c.cid dan s.sname = #{sname} </pilih>Dengan cara ini tes akan berhasil. Misi selesai.
Kode lengkapnya adalah sebagai berikut:
Skrip database MySQL
-- Delete database drop database if exists mybaits;-- Create database create database if not exists mybatis default character set utf8;-- Select database use mybatis;-- Delete data table drop table if exists student ;drop table if exists card;-- Create data table create table card(cid int(255), num varchar(18), constraint pk_cid primary key (cid)); create table student(sid int(255),sname varchar(32),scid int(255),constraint pk_sid primary key (sid),constraint fk_scid foreign key (sid) references card(cid));-- Add test data insert into card (cid,num) values(1,'123456789012345678');insert into student (sid,sname,scid) nilai (1, 'haha', 1);
Kelas alat mybatis.java kelas
Paket util; impor java.io.ioException; impor java.io.reader; impor java.sql.connection; impor org.apache.iathis.io.Resources; impor org.apache.atis.session.Session; org.apache.ibatis.Session.SQLSessionFactoryBuilder; kelas publik mybatisutil {private static Threadlocal <sqlsession> threadlocal = threadlocal baru <sqlsession> (); Metode public static SQLSessionFactory SQLSESSESSESSESTORY (SQLSESSION;//MODOK PRIBRIM SQLSESSESTORY SQLSESTORY SQLSESSESTORYFACTORY;//MODOK PRICORIC PRivATECICORY SQLSESSESTORY SQLSESSESTORY; src /mybatis.cfg.xmlstatic {try {reader reader = Resources.getResourCeasReader ("mybatis.cfg.xml"); sqlSessionFactory = oMerPrace {buile ();}} {} {ioExceptoryBuilder (ioExceptoryBuilder (). SQLSession* @return*/public static SQLSession getsqlSession () {// Dapatkan objek SQLSession dari ThreadSQLSession sqlsession = threadlocal.get (); if (sqlsession == null) {if (sqlSessionFacpactory! = Null) {sqlsession (sqlSesesicesesicy. SQLSession terikat pada threadthreadlocal.set saat ini (sqlsession);}} mengembalikan sqlsession;}/*** Tutup sqlsession dan terpisah dari utas saat ini*/public static void closeesQLSession () {// dapatkan objek sqlsession dari thread sqlsession () {// dapatkan objek sqlsession dari sqlsession sqlsession () {// dapatkan sqlsession dari thread sqlsession sqlsession = sqlSession = sqlSession = sqlSession = SQLSESSESSESSESESSIESS = SQLSESSESSESSESESSION =) Objek SQLSESSESSION (SQLSESSESSESSION () if (sqlsession! = null) {// tutup objek sqlsession sqlsession.close (); // pisahkan hubungan antara utas saat ini dan sqlsession threadlocal.remove ();}} // uji public static Main (string [] args) {SQLSESSESSESESSION = MyBaTSESSESSERE = MyBaSesesi = MyBSESSESSESSESSESSESSET = MYBSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSEM sqlSession.getConnection (); System.out.println (conn! = null? "Koneksi berhasil": "koneksi gagal");}}file 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-3-config.dtd"> <Configuration> <! default = "mysql_developer"> <!-menghubungkan informasi lingkungan mySQL-> <lingkungan id = "mysql_developer"> <!-mybatis menggunakan jdbc transaction manager-> <transactionManager type = "jdbc"/> <!-mybatis menggunakan koneksi pooling untuk mendapatkan objek koneksi-"jdbc"/> <! Database -> <nama properti = "driver" value = "com.mysql.jdbc.driver"/> <name properti = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/> <nama properti = "nama pengguna" value = "root"/> <a name = " value = "mysqladmin"/> <dateSource> </urvence> <!-menghubungkan informasi lingkungan oracle-> <lingkungan id = "oracle_developer"> <!-mybatis menggunakan jdbc transaction manager-> <TransactionManager type = "jdbc"/<!-mybatis menggunakan koneksi pooling untuk mendapatkan objek koneksi-"jdbc"/<!-mybatis menggunakan koneksi pooling koneksi untuk koneksi objek koneksi-"jdbc"/<"-mybatis menggunakan koneksi pooling koneksi untuk koneksi objek Koneksi-" JDBC "/<" interacting with databases --><property name="driver" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/><property name="username" value="scott"/><property name="password" value = "Tiger"/> </dateSource> </vervence> </urveperments> <!-Memuat file peta-> <phappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2One/studermapper.xml"/> </mappers> </configuration>
Card.java and student.java
package one2one;import java.io.Serializable;/*** ID card* @author Administrator**/@SuppressWarnings("serial")public class Card implements Serializable{private Integer cid;private String num;public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public String getNum() {return num;} public void setnum (string num) {this.num = num;}} paket one2one; import java.io.serializable;/*** siswa @Author administrator **/ @Suppresswarnings ("Serial") Public Class Student mengimplementasikan serializable {private integer private sname sname; private sname sname; private string sname; private STRIMER STRIMER STRIE; setSid (integer sid) {this.sid = sid;} public string getSname () {return sname;} public void setSname (string sname) {this.sname = sname;} card public getCard () {return card;} public void setCard (kartu) {this.card = card =} card;File cardmapper.xml card.java
<? 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"> <mapper naPape = "cardmace" <papper = "mapper = type = "One2One.card" id = "cardmap"> <id kolom = "cid" properti = "cid"/> <column column = "num" properti = "num"/> <RancesMap> </mapper>
File pemetaan yang sesuai dengan file student.java kelas studentmapper.xml
<? 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"> <mapper naPape = "mapperpace =" mapper "> <mapper =" mapper "> <mapper =" mapper "> type="one2one.Student" id="studentMap"><id column="sid" property="sid"/><result column="sname" property="sname"/><!-- Introduce mapping information in CardMapper.xml file property represents the associated properties of Student --><association property="card" resultMap="cardNameSpace.cardMap"/></resultMap><select id="findById" parameterType = "integer" resultMap = "studentmap"> select s.sid, s.sname, c.cid, c.num dari siswa, kartu cherwhere s.sid = c.cid dan s.sid = #{sid} </pilih> <pilih id = "findbyname" parameterType = "string" hasil "studentsmap"> s.name> s.scid = c.cid dan s.sname = #{sname} </select> </mapper>Kelas Kegigihan Lapisan StudentCarddao.java kelas
Paket One2One; Impor org.apache.Ibatis.Session.SqlSession; impor org.junit.test; import util.mybatisutil;/*** Lapisan Persistensi*@Author Administrator **/Public Class StudentCardDao {/*** Query No. Informasi No. 1 Informasi Kartu dan ID ID ID* @Public* @Ukuran @ @*** Informasi Student No. Pengecualian {SQLSession SQLSession = null; coba {sqlSession = mybatisutil.getSqlSession (); return sqlSession.selectone ("studentnamespace.findbyid", id);} catch (pengecualian e) {e.printstackace (); throw e;} finally{MyBatisUtil.closeSqlSession();}}/*** Query "haha" student information and ID card information* @param name* @return* @throws Exception*/public Student findByName(String name) throws Exception{SqlSession sqlSession = null;try {sqlSession = MyBatisUtil.getSqlSession();return sqlsession.selectone ("studentnamespace.findbyname", name);} catch (exception e) {e.printstacktrace (); lempar e;} akhirnya {mybatisutil.closesqlSession ();}} {uji {mybatisutil.closes {uji {publion void {{{uji {{uji {uji {st publion {test {test StudentCardDao baru (); Siswa Siswa = Dao.FindById (1); System.out.println (Student.getSid ()+":"+Student.getSname ()+":"+Student.getCard (). GetNum ());} uji uji "haHa" informasi mahasiswa dan informasi kartu ID @testpublic ()); dao = new studentcarddao (); siswa siswa = dao.findbyname ("haha"); System.out.println (student.getsid ()+":"+student.getSname ()+":"+student.getcard (). getnum ());}}Di atas adalah tutorial pertama tentang pemetaan mybatis satu-ke-satu yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!