MyBatis เป็นกรอบการคงอยู่ของ Java ที่เชื่อมโยงวัตถุกับขั้นตอนที่เก็บไว้หรือคำสั่ง SQL ผ่านตัวอธิบาย XML หรือคำอธิบายประกอบ
MyBatis เป็นซอฟต์แวร์ฟรีที่จัดจำหน่ายภายใต้ Apache License 2.0 และเป็นรุ่นสาขาของ Ibatis 3.0 ทีมบำรุงรักษาของมันยังรวมถึงสมาชิกเริ่มต้นของ Ibatis
ซึ่งแตกต่างจากกรอบการทำแผนที่ความสัมพันธ์วัตถุอื่น ๆ MyBatis ไม่ได้เชื่อมโยงวัตถุ Java กับตารางฐานข้อมูล แต่เป็นวิธี Java กับคำสั่ง SQL MyBatis ช่วยให้ผู้ใช้สามารถใช้ประโยชน์อย่างเต็มที่จากฟังก์ชั่นฐานข้อมูลต่างๆเช่นขั้นตอนการจัดเก็บมุมมองการสืบค้นที่ซับซ้อนและคุณสมบัติที่เป็นกรรมสิทธิ์ของฐานข้อมูล หากคุณต้องการใช้งานฐานข้อมูลดั้งเดิมฐานข้อมูลที่ผิดปกติหรือมีการควบคุมการดำเนินการ SQL ที่สมบูรณ์ MyBatis เป็นตัวเลือกที่ดี
เมื่อเปรียบเทียบกับ JDBC แล้ว MyBatis จะทำให้รหัสที่เกี่ยวข้องง่ายขึ้น: คำสั่ง SQL สามารถดำเนินการในรหัสบรรทัดเดียว MyBatis จัดทำเครื่องมือการทำแผนที่ที่ทำแผนที่ผลลัพธ์การดำเนินการของคำสั่ง SQL ด้วยแผนผังวัตถุ คำสั่ง SQL สามารถสร้างได้แบบไดนามิกโดยใช้ภาษานิพจน์ XML ในตัวหรือใช้ปลั๊กอินแบบรวม Apache Velocity
MyBatis รวมเข้ากับ Framework Spring และ Google Guice ซึ่งช่วยประหยัดนักพัฒนาจากปัญหาการพึ่งพา
MyBatis รองรับการแคชข้อมูลที่เปิดเผย เมื่อคำสั่ง SQL ถูกทำเครื่องหมายว่า "แคช" ข้อมูลทั้งหมดที่ได้จากฐานข้อมูลเมื่อมีการดำเนินการครั้งแรกจะถูกเก็บไว้ในแคช เมื่อคำสั่งนี้ถูกดำเนินการในอนาคตผลลัพธ์จะถูกอ่านจากแคชแทนการกดปุ่มฐานข้อมูลอีกครั้ง MyBatis ให้การใช้งานแคชที่ใช้ Java HashMap โดยค่าเริ่มต้นรวมถึงตัวเชื่อมต่อเริ่มต้นสำหรับการเชื่อมต่อกับ Oscache, Ehcache, Hazelcast และ Memcached MyBatis ยังให้ API สำหรับการใช้งานแคชอื่น ๆ
จุดสำคัญ
หลังจากเรียนรู้ในช่วงเวลานี้กระบวนการหลักสำหรับ mybatis ไม่สามารถเป็นขั้นตอนต่อไปนี้ได้
1. รับ SessionFactory จากไฟล์การกำหนดค่า XML จากนั้นสร้างเซสชันที่เกี่ยวข้องจาก SessionFactory
2. ใช้วัตถุเซสชันเพื่อดำเนินการ CRUD ที่สอดคล้องกัน (การเพิ่มการลบการปรับเปลี่ยนและการสืบค้น) และการควบคุมธุรกรรมที่เกี่ยวข้องกับข้อมูลธุรกิจ
3. ปิดเซสชันที่เกี่ยวข้องหลังจากใช้เพื่อหลีกเลี่ยงการใช้ทรัพยากรมากเกินไป
4. ใช้ไฟล์ Mapper XML ที่เกี่ยวข้องเพื่อกำหนดค่าการดำเนินการแผนที่ที่สอดคล้องกันระหว่าง Javabean ของเอนทิตีธุรกิจและตารางฐานข้อมูล
การเตรียมสงครามก่อน:
1. สภาพแวดล้อมการพัฒนา Eclipse Javaee Ide, JDK 1.6, ฐานข้อมูล MySQL 5.5
2. ดาวน์โหลดแพ็คเกจ JAR ที่สอดคล้องกันเพื่อใช้ในภายหลัง
mybatis-3.2.3.zip หลังจากการบีบอัด, นำ MyBatis-3.2.3.jar, => ที่อยู่ดาวน์โหลด: http://code.google.com/p/mybatis/ (แพ็คเกจหลัก mybatis)
mybatis-generator-core-1.3.1.jar => ที่อยู่ดาวน์โหลด: http://code.google.com/p/mybatis/wiki/generator (mybatis สร้างแพ็คเกจไฟล์กำหนดค่าโดยอัตโนมัติ)
mysql-connector-java-5.1.26-bin.jar => ที่อยู่ดาวน์โหลด: http://dev.mysql.com/downloads/connector/j/ (แพ็คเกจไดรเวอร์ JDBC ของ MySQL)
ขั้นตอนการก่อสร้าง
ถัดไปคุณสามารถสร้างโครงการโครงการ Java ที่เรียกว่า MyBatisDemo ภายใต้ Eclipse และสร้างโครงสร้างแพ็คเกจที่สอดคล้องกันและโครงสร้างโฟลเดอร์ดังแสดงในรูปด้านล่างซึ่ง config และ mapper เป็นโฟลเดอร์ตามลำดับ
โปรแกรมการสาธิตการสาธิตที่สอดคล้องกันและวัตถุ Javabean ถูกเก็บไว้ภายใต้แพ็คเกจ David.mybatis.demo และแพ็คเกจ David.mybatis.model และแพ็คเกจ Jar ของบุคคลที่สามที่เพิ่งดาวน์โหลดจะถูกเก็บไว้ในโฟลเดอร์ LIB
หลังจากสร้างไดเรกทอรีต่อไปนี้เราสามารถเพิ่มแพ็คเกจ JAR ที่สอดคล้องกันดังแสดงในรูปด้านล่าง
หลังจากเสร็จสิ้นให้ดำเนินการ SQL ต่อไปนี้เพื่อสร้างโครงสร้างตารางที่จำเป็นสำหรับการสาธิตรวมถึง 3 ตารางผู้เยี่ยมชม (ตารางผู้เยี่ยมชม) เว็บไซต์ (ตารางเว็บไซต์) และช่องทาง (ตารางช่องทาง)
/*สร้างผู้เยี่ยมชม*/สร้างผู้เยี่ยมชมตาราง (ID int (11) NON NULL AUTO_INCREMENT, ชื่อ VARCHAR (1000) NOL, EMAIL VARCHAR (1000) ไม่ใช่ NULL สถานะ int ไม่ใช่ค่าเริ่มต้น 1, CreateTime Datetime, รหัสหลัก (ID)) สถานะ int ไม่ใช่ null default 1, createTime dateTime)/*สร้างตารางช่องทาง*/สร้างช่องตาราง (ID int ไม่ใช่ NULL หลักคีย์หลัก Auto_Increment ชื่อ VARCHAR (1000) ไม่ใช่ NULL เว็บไซต์อ้างอิง INT (ID) สถานะ int ไม่ใช่ค่าเริ่มต้น 1, CreateTime DateTime)
หลังจากทั้งหมดนี้เสร็จแล้วเราจะเริ่มทำ ~
ดังที่ได้กล่าวไว้ในตอนแรกการกำหนดค่า MyBatis ทั้งหมดมาจากไฟล์การกำหนดค่า XML เราจำเป็นต้องสร้างไฟล์กำหนดค่าใหม่ที่ชื่อว่า mybatis_demo_config.xml ในโฟลเดอร์ config สิ่งนี้เป็นหนึ่งในการดำเนินการหลักที่เราต้องดำเนินการในภายหลัง
เมื่อกำหนดค่าไฟล์นี้คุณจะต้องให้ความสนใจกับองค์ประกอบในโหนด <การกำหนดค่า> ที่มีข้อกำหนดการสั่งซื้อแบบลำดับชั้นและไม่สามารถเปลี่ยนแปลงได้ตามต้องการ มิฉะนั้นข้อยกเว้นจะเกิดขึ้นเมื่อโหลดไฟล์การกำหนดค่า XML ส่งผลให้การดำเนินการที่ตามมาไม่สำเร็จ
สำหรับคำอธิบายโหนดเฉพาะคุณสามารถตรวจสอบ http://mybatis.github.io/mybatis-3/zh/configuration.html# ที่นี่เราพูดถึงโหนดที่ใช้กันทั่วไปมากขึ้น typealiases สภาพแวดล้อมการทำแผนที่
1. typealiases => โหนดนามแฝง คุณสามารถตั้งค่าคุณสมบัติของโหนดนี้เพื่อให้นามแฝงนี้ถูกใช้แทนชื่อที่ผ่านการรับรองอย่างสมบูรณ์ในไฟล์การกำหนดค่า
ตัวอย่างเช่น <typealias type = "david.mybatis.model.visitor" alias = "ผู้เยี่ยมชม" />
2. สภาพแวดล้อม => โหนดสภาพแวดล้อมการกำหนดค่าข้อมูลที่เกี่ยวข้องกับการเชื่อมต่อข้อมูล
3. mappers => กำหนดค่าคำสั่งการแมป SQL
การกำหนดค่าที่ง่ายที่สุดมีดังนี้:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd type = "david.mybatis.model.visitor" alias = "ผู้เยี่ยมชม" /> < /typealiases> <environment default = "การพัฒนา"> <environment id = "การพัฒนา"> <transactionManager type = "jdbc"> < /transactionManager> ? useUnicode = true & catreatencoding = utf8 เพื่อสนับสนุนการแทรกภาษาจีน-> <ชื่อคุณสมบัติ = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis_db? useunicode = true & catreatureCoding = UTF8"/> value = "123456"/> </tataSource> </environment> </venvironments> <mappers> <mapper Resource = "Mapper/Visitormapper.xml"/> </aemappers> </การกำหนดค่า>
สร้างคลาสใหม่ที่เรียกว่า mybatisutils ภายใต้แพ็คเกจ david.mybatis.demo ซึ่งเก็บวิธีการที่จะได้รับ sqlsession และปิด sqlsession ซึ่งถูกสกัดเพื่ออำนวยความสะดวกในการใช้ซ้ำหลายครั้ง
แพ็คเกจ david.mybatis.demo; นำเข้า java.io.inputstream; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.apache.ibatis.session.sqlsessionformatory; david.mybatis.model.crud_enum; คลาสสาธารณะ mybatisutils {สตริงสุดท้ายคงที่ส่วนตัว config_path = "config/mybatis_demo_config.xml"; /** รับลิงค์การเข้าถึงฐานข้อมูล*/ สาธารณะ SQLSession GetSqlSession () {SQLSession Session = NULL; ลอง {inputStream stream = resources.getResourceasstream (config_path); // สภาพแวดล้อมฐานข้อมูลที่สอดคล้องกันสามารถอ่านได้ตามสภาพแวดล้อมที่สอดคล้องกันที่กำหนดค่า // SQLSessionFactory Factory = ใหม่ SQLSessionFactoryBuilder (). สร้าง (// สตรีม "การพัฒนา"); SQLSessionFactory Factory = ใหม่ SQLSessionFactoryBuilder () .build (สตรีม); เซสชั่น = โรงงาน. opensession (); } catch (exception e) {// todo: จัดการข้อยกเว้น e.printstacktrace (); } return session; } / * * รับลิงค์การเข้าถึงฐานข้อมูล * / โมฆะคงที่สาธารณะปิด (เซสชัน SQLSession) {session.close (); } /** ส่งคืนข้อความการทำงานของการทำงาน* / โมฆะคงที่สาธารณะ showMessages (ประเภท crud_enum, จำนวน int) {switch (type) {case add: system.out.println ("เพิ่ม" + count + "บันทึก"); หยุดพัก; เคสลบ: system.out.println ("ลบ" + count + "บันทึก"); หยุดพัก; การอัปเดตกรณี: System.out.println ("อัปเดต" + count + "บันทึก"); หยุดพัก; Case Query: System.out.println ("จับคู่" + count + "บันทึก"); หยุดพัก; รายการกรณี: system.out.println ("รวม" + count + "บันทึก"); หยุดพัก; ค่าเริ่มต้น: break; -สร้างคลาสใหม่ที่ชื่อว่าผู้เยี่ยมชมภายใต้แพ็คเกจ David.mybatis.model เพื่อใช้เป็นสิ่งที่สอดคล้องกันหรือการแมป
แพ็คเกจ david.mybatis.model; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; ผู้เข้าชมชั้นเรียนสาธารณะ {ID ส่วนตัว ID; ชื่อสตริงส่วนตัว; อีเมลสตริงส่วนตัว สถานะ int ส่วนตัว; วันที่ส่วนตัว createTime; ผู้เยี่ยมชมสาธารณะ () {// todo todo ที่สร้างขึ้นอัตโนมัติ createTime createTime = วันที่ใหม่ (); } ผู้เยี่ยมชมสาธารณะ (ชื่อสตริงอีเมลสตริง) {this.name = name; this.email = อีเมล; this.status = 1; this.createTime = วันที่ใหม่ (); } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setEmail (อีเมลสตริง) {this.email = อีเมล; } สตริงสาธารณะ getEmail () {ส่งคืนอีเมล; } วันที่สาธารณะ getCreateTime () {return createTime; } @Override สตริงสาธารณะ toString () {// toDo วิธีที่สร้างขึ้นอัตโนมัติ stub return สตริง String.format ("{id: %d, ชื่อ: %s, createTime: %s}", id, ชื่อ, simpledateFormat ใหม่ ("yyyy-mm-dd hh: mm: ss") -สร้าง Visitormapper.xml ใหม่ภายใต้แพ็คเกจ David.mybatis.demo เพื่อทำแผนที่คำสั่ง SQL ที่เกี่ยวข้อง
ที่นี่คุณควรทราบว่า namespace => david.mybatis.demo.ivisitoroperation ต้องเชื่อมโยงกับชื่อไฟล์จริงด้านล่างแพ็คเกจที่เกี่ยวข้อง มิฉะนั้นไฟล์การแมปที่เกี่ยวข้องไม่สามารถโหลดได้สำเร็จ
<mapper namespace = "david.mybatis.demo.ivisitoroperation"> <select id = "basicQuery" parameterType = "int" resultSpe = "ผู้เยี่ยมชม"> เลือก * จากผู้เยี่ยมชมที่ id =#{id} และสถานะ> 0 ลำดับ รันโปรแกรมต่อไปนี้
Public Static Void TestBasicQuery (ID int) {SQLSESSION SESSION = MyBatisutils.getSqlSession (); ลอง {ผู้เยี่ยมชมผู้เข้าชม = (ผู้เยี่ยมชม) เซสชัน SESSELECTONE ("DAVID.MYBATIS.DEMO.IVISITOROPERATION.BASICQUERY", ID); mybatisutils.closesession (เซสชัน); System.out.println (ผู้เยี่ยมชม); } catch (exception e) {// todo: จัดการข้อยกเว้น}} ผลการดำเนินการที่ง่ายที่สุดออกมา
นี่คือ helloword ของซีรีส์ mybatis ~