MyBatis เป็นเฟรมเวิร์กเลเยอร์การคงอยู่ที่ยอดเยี่ยมที่รองรับการสืบค้น SQL แบบธรรมดาขั้นตอนที่เก็บไว้และการทำแผนที่ขั้นสูง MyBatis กำจัดการตั้งค่าด้วยตนเองของรหัส JDBC เกือบทั้งหมดและพารามิเตอร์และการค้นหาการห่อหุ้มของชุดผลลัพธ์ MyBatis สามารถใช้ XML อย่างง่ายหรือคำอธิบายประกอบสำหรับการกำหนดค่าและการแมปดั้งเดิมการแมปอินเทอร์เฟซและ pojos ของ Java (วัตถุ Java เก่าธรรมดา) ลงในบันทึกในฐานข้อมูล
การทำแผนที่แบบตัวต่อตัว
ในชีวิตยังมีตัวอย่างแบบตัวต่อตัวเช่นนักเรียนและบัตรประจำตัวประชาชนหรือในประเทศของเราระบบคู่สมรสคนเดียวจะถูกนำไปใช้ จากนั้นเรามีบัตรประจำตัวประชาชนเพียงใบเดียวสำหรับนักเรียนและบัตรประจำตัวประชาชนและแน่นอนว่ามีบัตรประจำตัวประชาชนเพียงใบเดียวสำหรับบัตรประจำตัวประชาชนแต่ละใบ
สคริปต์ฐานข้อมูล:
- ลบฐานข้อมูลฐานข้อมูลดร็อปหากมี myBaits;- สร้างฐานข้อมูลสร้างฐานข้อมูลหากไม่มีตัวอักษรเริ่มต้น mybatis ชุด utf8;- เลือกฐานข้อมูลใช้ mybatis;- ลบตารางการวางตารางข้อมูลหากมีอยู่ในตารางที่มีอยู่ในบัตร สร้างนักเรียนตาราง (SID Int (255), Sname Varchar (32), SCID Int (255), ข้อ จำกัด PK_SID หลัก (SID), ข้อ จำกัด FK_SCID คีย์ต่างประเทศ (SID) บัตรอ้างอิง (CID));- เพิ่มข้อมูลทดสอบลงในการ์ด (CID, NUM) ค่า (1, 'ฮ่าฮ่า', 1);
สร้างคลาส one2one.card.java ใหม่
แพ็คเกจ one2one; นำเข้า java.io.serializable;/*** บัตรประจำตัวประชาชน*@author ผู้ดูแลระบบ **/ @suppresswarnings ("serial") การ์ดระดับสาธารณะใช้งาน serializable {private integer cid; สตริงส่วนตัว; {return num;} โมฆะสาธารณะ setNum (สตริง num) {this.num = num;}}สร้างคลาส one2one.student.java ใหม่
แพ็คเกจ one2one; นำเข้า java.io.serializable;/*** นักเรียน*@author ผู้ดูแลระบบ **/ @suppresswarnings ("serial") นักเรียนชั้นเรียนสาธารณะใช้ serializable {private Integer sid; สตริงส่วนตัว; บัตรส่วนตัว; sname;} โมฆะสาธารณะ setSname (สตริง sname) {this.sname = sname;} การ์ดสาธารณะ getCard () {return card;} โมฆะสาธารณะ setCard (การ์ดการ์ด) {this.card = card;}}}สร้างไฟล์ cardmapper.xml ใหม่ภายใต้แพ็คเกจ One2One
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Mapper สาธารณะ "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtddtd type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <resultmap> </mapper>
ในทำนองเดียวกันสร้างไฟล์ studentmapper.xml ใหม่ภายใต้แพ็คเกจ one2one
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Mapper สาธารณะ "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtddtd type = "one2one.student" id = "studentmap"> <id column = "sid" คุณสมบัติ = "sid"/> <result column = "sname" คุณสมบัติ = "sname"/> <!-อย่าเขียนฟิลด์ที่เกี่ยวข้อง-> </resultmap> <select id = "findById chere s.scid = c.cid และ s.sid = #{sid} </select> </mapper>สร้างไฟล์ mybatis.cfg.xml ใหม่ภายใต้ไฟล์ src และรวมไฟล์ studentmapper.xml และ cardmapper.xml
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" default = "mysql_developer"> <!-เชื่อมต่อข้อมูลสภาพแวดล้อม mysql-> <environment id = "mysql_developer"> <!-mybatis ใช้ตัวจัดการธุรกรรม JDBC-> <transactionManager ประเภท = "JDBC"/> <! ฐานข้อมูล -> <property name = "driver" value = "com.mysql.jdbc.driver"/> <property name = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/> <ชื่อคุณสมบัติ = "Username" value = "mysqladmin"/> <datasource> </environment> <!-เชื่อมต่อข้อมูลสภาพแวดล้อมของ Oracle-> <environment id = "Oracle_developer"> <!-MyBatis ใช้ JDBC Transaction Manager-> <transactionManager ประเภท = "JDBC"/> <! คุณสมบัติสำหรับการโต้ตอบกับฐานข้อมูล -> <property name = "driver" value = "oracle.jdbc.driver.oracledriver"/> <property name = "url" value = "jdbc: Oracle: Thin:@127.0.0.1: 1521: ORCL"/> < value = "tiger"/> </dataSource> </environment> </environment> <!-การโหลดไฟล์แผนที่-> <mappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2one/studentmapper.xml"/> </mappers>
สร้างคลาสเครื่องมือใหม่ mybatisutil.java ภายใต้แพ็คเกจ UTIL
แพ็คเกจ util; นำเข้า java.io.ioException; นำเข้า java.io.Reader; นำเข้า java.sql.connection; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsession; org.apache.ibatis.session.sqlsessionfactorybuilder; คลาสสาธารณะ mybatisutil {private static threadlocal <SqlSession> Threadlocal = ใหม่ Threadlocal <Sqlsession> (); src /mybatis.cfg.xmlstatic {ลอง {reader reader = resources.getResourceAreder ("mybatis.cfg.xml"); sqlsessionfactory = sqlsessionfactorybuilder (); sqlsession* @return*/สาธารณะคงที่ sqlsession getSqlSession () {// รับวัตถุ SQLSession จาก ThreadsqlSession ปัจจุบัน sqlsession = Threadlocal.get (); ถ้า (sqlsession == null) {ถ้า (sqlsessionformition ถูกผูกไว้กับ threadthreadlocal.set ปัจจุบัน (sqlsession);}} return sqlsession;}/*** ปิด sqlsession และแยกออกจากเธรดปัจจุบัน*/โมฆะคงที่สาธารณะปิด sqlsession () {// get sqlsession วัตถุจาก sqlsession sqlsession sqlsession if (sqlsession! = null) {// ปิด sqlsession object sqlsession.close (); // แยกความสัมพันธ์ระหว่างเธรดปัจจุบันและ sqlsession Threadlocal.remove ();}} // การทดสอบสาธารณะ sqlsession.getConnection (); system.out.println (conn! = null? "การเชื่อมต่อสำเร็จ": "การเชื่อมต่อล้มเหลว");}}สร้างคลาสการคงอยู่ของชั้นใหม่ stuentcarddao.java คลาส
แพ็คเกจ one2one; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.junit.test; นำเข้า util.mybatisutil;/*** เลเยอร์การคงอยู่*@author ผู้ดูแลระบบ **/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @student id idext id ข้อยกเว้น {sqlsession sqlsession = null; ลอง {sqlsession = mybatisutil.getsqlsession (); return sqlsession.selectone ("studentnamespace.findbyid", id);} catch (ยกเว้น e) {e.printstacktrace () ข้อมูลนักเรียนหมายเลข 1 ข้อมูลและบัตรประจำตัวประชาชน @TestPublic เป็นโมฆะ testFindById () โยนข้อยกเว้น {StudentCarddao dao = ใหม่ studentcarddao (); นักเรียนนักเรียน = dao.findbyid (1); system.out.println (student.getsid ()+":"+นักเรียนในเวลานี้เราสามารถสอบถามชื่อนักเรียนหมายเลข 1 ได้เท่านั้น แต่เราไม่สามารถสอบถามหมายเลขประจำตัวได้เนื่องจากค่าของแอตทริบิวต์การ์ดในเวลานี้คือ NULL ซึ่งสามารถมองเห็นได้จาก StudentMapper.xml
<select id = "findById" parameterType = "Integer" resultMap = "StudentMap">
เมื่อ MyBatis แยกวิเคราะห์ประโยคนี้มันสามารถห่อหุ้มข้อมูลการสืบค้นลงใน SID และ SNAME เท่านั้นฉันควรทำอย่างไร
ใน studentmapper.xml
<resultmap type = "one2one.card" id = "cardmap"> <id column = "cid" คุณสมบัติ = "cid"/> <result column = "num" property = "num"/> <result column = "num"/> </resultsmap>
เพิ่มขึ้น
<!-แนะนำข้อมูลการแม็พในคุณสมบัติไฟล์ cardmapper.xml แสดงถึงคุณสมบัติที่เกี่ยวข้องของนักเรียน-> <Association property = "card" resultmap = "cardnamespace.cardmap"/> >>
จากนั้นเนื้อหาที่สมบูรณ์ของ studentmapper.xml ในเวลานี้มีดังนี้:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Mapper สาธารณะ "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtddtd type = "one2one.student" id = "studentmap"> <id column = "sid" คุณสมบัติ = "sid"/> <result column = "sname" คุณสมบัติ = "sname"/> <! id = "findById" parameterType = "จำนวนเต็ม" resultmap = "studentmap"> เลือก S.SID, S.Sname, C.Cid, C.Num จากนักเรียน S, CARD CHERE S.SCID = C.CID และ S.SID = #{SID}ตอนนี้คุณสามารถทดสอบหมายเลขรหัสนักเรียนของคุณ
เปลี่ยนวิธีการทดสอบของคลาสการคงอยู่ชั้น stuentcarddao.java
// testpublic เป็นโมฆะ testfindbyid () โยนข้อยกเว้น {StudentCarddao dao = ใหม่ studentcarddao () นักเรียนนักเรียน = dao.findbyid (1); system.out.println (student.getsid ()+":"+student.getSname ()+":"ในทำนองเดียวกัน
เพิ่มวิธีการสอบถามข้อมูลนักเรียน "ฮ่าฮ่า" และข้อมูลบัตรประจำตัวประชาชนในชั้นเรียน studentdao.java
/*** สอบถามข้อมูลข้อมูลและบัตรประจำตัวประชาชนของนักเรียน "haha"* @param name* @return* @throws Exception*/นักเรียนสาธารณะ findByName (ชื่อสตริง) โยนข้อยกเว้น {sqlsession sqlsession = null; ลอง {sqlsession = myBatisUtil.getSqlSession () e) {e.printstacktrace (); โยน e;} ในที่สุด {mybatisutil.closesqlsession ();}}และเพิ่มวิธีการทดสอบ
// testpublic void testfindbyname () โยนข้อยกเว้น {StudentCarddao dao = ใหม่ studentcarddao (); นักเรียนนักเรียน = dao.findbyname ("ฮ่าฮ่า"); system.out.println (นักเรียน getSid ()+":"+นักเรียนแน่นอนถ้าคุณทดสอบตอนนี้คุณจะตายอย่างน่าสังเวชเพราะคุณไม่ได้กำหนดค่า <elect> ในไฟล์ studentmapper.xml ดังนั้นเพิ่ม <elect> ข้อมูลการกำหนดค่าไปยังไฟล์ studentmapper.xml
<select id = "findByName" parameterType = "String" resultMap = "StudentMap"> เลือก S.SID, S.Sname, C.Cid, C.Num จากนักเรียน S, CARD CHERE S.SCID = C.CID และ S.SNAME = #{SNAME} </Select>วิธีนี้การทดสอบจะประสบความสำเร็จ ภารกิจเสร็จสิ้น
รหัสที่สมบูรณ์มีดังนี้:
สคริปต์ฐานข้อมูล MySQL
- ลบฐานข้อมูลฐานข้อมูลดร็อปหากมี myBaits;- สร้างฐานข้อมูลสร้างฐานข้อมูลหากไม่มีตัวอักษรเริ่มต้น mybatis ชุด utf8;- เลือกฐานข้อมูลใช้ mybatis;- ลบตารางการวางตารางข้อมูลหากมีอยู่ในตารางที่มีอยู่ในบัตร สร้างนักเรียนตาราง (SID Int (255), Sname Varchar (32), SCID Int (255), ข้อ จำกัด PK_SID หลัก (SID), ข้อ จำกัด FK_SCID คีย์ต่างประเทศ (SID) บัตรอ้างอิง (CID));- เพิ่มข้อมูลทดสอบลงในการ์ด (CID, NUM) ค่า (1, 'ฮ่าฮ่า', 1);
คลาสเครื่องมือ mybatis.java คลาส
แพ็คเกจ util; นำเข้า java.io.ioException; นำเข้า java.io.Reader; นำเข้า java.sql.connection; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsession; org.apache.ibatis.session.sqlsessionfactorybuilder; คลาสสาธารณะ mybatisutil {private static threadlocal <SqlSession> Threadlocal = ใหม่ Threadlocal <Sqlsession> (); src /mybatis.cfg.xmlstatic {ลอง {reader reader = resources.getResourceAreder ("mybatis.cfg.xml"); sqlsessionfactory = sqlsessionfactorybuilder (); sqlsession* @return*/สาธารณะคงที่ sqlsession getSqlSession () {// รับวัตถุ SQLSession จาก ThreadsqlSession ปัจจุบัน sqlsession = Threadlocal.get (); ถ้า (sqlsession == null) {ถ้า (sqlsessionformition ถูกผูกไว้กับ threadthreadlocal.set ปัจจุบัน (sqlsession);}} return sqlsession;}/*** ปิด sqlsession และแยกออกจากเธรดปัจจุบัน*/โมฆะคงที่สาธารณะปิด sqlsession () {// get sqlsession วัตถุจาก sqlsession sqlsession sqlsession if (sqlsession! = null) {// ปิด sqlsession object sqlsession.close (); // แยกความสัมพันธ์ระหว่างเธรดปัจจุบันและ sqlsession Threadlocal.remove ();}} // การทดสอบสาธารณะ sqlsession.getConnection (); system.out.println (conn! = null? "การเชื่อมต่อสำเร็จ": "การเชื่อมต่อล้มเหลว");}}ไฟล์ mybatis.cfg.xml
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" default = "mysql_developer"> <!-เชื่อมต่อข้อมูลสภาพแวดล้อม mysql-> <environment id = "mysql_developer"> <!-mybatis ใช้ตัวจัดการธุรกรรม JDBC-> <transactionManager ประเภท = "JDBC"/> <! ฐานข้อมูล -> <property name = "driver" value = "com.mysql.jdbc.driver"/> <property name = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/> <ชื่อคุณสมบัติ = "Username" value = "mysqladmin"/> <datasource> </environment> <!-เชื่อมต่อข้อมูลสภาพแวดล้อมของ Oracle-> <environment id = "Oracle_developer"> <!-MyBatis ใช้ JDBC Transaction Manager-> <transactionManager ประเภท = "JDBC"/> <! คุณสมบัติสำหรับการโต้ตอบกับฐานข้อมูล -> <property name = "driver" value = "oracle.jdbc.driver.oracledriver"/> <property name = "url" value = "jdbc: Oracle: Thin:@127.0.0.1: 1521: ORCL"/> < value = "tiger"/> </dataSource> </environment> </environment> <!-การโหลดไฟล์แผนที่-> <mappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2one/studentmapper.xml"/> </mappers>
card.java และ student.java
แพ็คเกจ one2one; นำเข้า java.io.serializable;/*** บัตรประจำตัวประชาชน*@author ผู้ดูแลระบบ **/ @suppresswarnings ("serial") การ์ดระดับสาธารณะใช้งาน serializable {private integer cid; สตริงส่วนตัว; {return num;} โมฆะสาธารณะ setnum (สตริง num) {this.num = num;}} package one2one; นำเข้า java.io.serializable;/*** นักเรียน*@author ผู้ดูแลระบบ **/ @suppresswarnings ("serial") setSID (จำนวนเต็ม sid) {this.sid = sid;} สตริงสาธารณะ getSname () {return sname;} โมฆะสาธารณะ setsname (สตริง sname) {this.sname = sname;} การ์ดสาธารณะ getCard () {การ์ดส่งคืน;ไฟล์การแม็พของ card.java cardmapper.xml
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Mapper สาธารณะ "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtddtd type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <resultmap> </mapper>
ไฟล์การแม็พที่สอดคล้องกับไฟล์ student.java studentmapper.xml
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Mapper สาธารณะ "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtddtd type = "one2one.student" id = "studentmap"> <id column = "sid" คุณสมบัติ = "sid"/> <result column = "sname" คุณสมบัติ = "sname"/> <! id = "findById" parameterType = "จำนวนเต็ม" resultmap = "studentmap"> เลือก s.sid, s.sname, c.cid, c.num จากนักเรียน s, การ์ด chere s.sid = c.cid และ s.sid = #{sid} </select> <select id = "findByName" S.SID, S.Sname, C.Cid, C.Num จากนักเรียน S, Card Chere S.Scid = C.CID และ S.Sname = #{Sname} </Select> </Mapper>ชั้นเรียน Layer Layer Studentcarddao.java
แพ็คเกจ one2one; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.junit.test; นำเข้า util.mybatisutil;/*** เลเยอร์การคงอยู่*@author ผู้ดูแลระบบ **/ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @student id idext id ข้อยกเว้น {sqlsession sqlsession = null; ลอง {sqlsession = mybatisutil.getsqlsession (); return sqlsession.selectone ("studentnamespace.findbyid", id);} catch (ยกเว้น e) {e.printstacktrace () ข้อมูลการสอบถามข้อมูลนักเรียนและบัตรประจำตัวประชาชน* @param ชื่อ* @return* @throws Exception*/นักเรียนสาธารณะ findByName (ชื่อสตริง) โยนข้อยกเว้น {sqlsession sqlsession = null; ลอง {sqlsession = mybatisutil.getsqlsession (); {e.printstacktrace (); โยน e;} ในที่สุด {mybatisutil.closesqlsession ();}} // ทดสอบสอบถามข้อมูลนักเรียนหมายเลข 1 และข้อมูลบัตรประจำตัวประชาชน @testpublic เป็นโมฆะ testfindbyid () นักเรียน dao.findbyid (1); system.out.println (student.getSid ()+":"+student.getSname ()+":"+student.getCard (). getNum ());} // การสอบถามข้อมูลนักเรียน {นักเรียน student = dao.findbyname ("haha"); system.out.println (student.getsid ()+":"+student.getSname ()+":"+student.getCard (). getNum ());}}}ข้างต้นเป็นบทช่วยสอนครั้งแรกในการทำแผนที่แบบหนึ่งต่อหนึ่ง MyBatis ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!