ใช้ mybatis เพียงอย่างเดียวเพื่อจัดการสิ่งต่างๆ
ฉันได้เขียนเนื้อหาที่เกี่ยวข้องในบทความของ MyBatis ที่นี่ฉันจะเขียนตัวอย่างที่ง่ายที่สุดต่อไป มาตรวจสอบเนื้อหาของ mybatis มาก่อน ก่อนอื่นให้สร้างตารางและสร้างตารางนักเรียนง่ายๆ:
สร้าง Table Student (Student_id int auto_increment, student_name varchar (20) ไม่ใช่ null, คีย์หลัก (student_id))
สร้าง entity class student.java:
นักเรียนชั้นเรียนสาธารณะ {Private int studentId; String Private String, ชื่อ Public Int getStudentId () {return studentId;} โมฆะสาธารณะ setstudentId (int studentId) {this.studentId = studentId;} สตริงสาธารณะ getStudentName () {return studentName; toString () {return "นักเรียน {[studentId:" + studentId + "], [studentName:" + studentName + "]}";}} เพื่อให้ได้มากขึ้นการเอาชนะวิธี ToString () สำหรับคลาสเอนทิตีและการพิมพ์แต่ละ (หรือแอตทริบิวต์คีย์) เป็นวิธีที่แนะนำ ถัดไปคือ config.xml ซึ่งมีการกำหนดค่า JDBC พื้นฐาน:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-configig.dtd" type = "org.xrq.domain.student"/> </typealiases> <environment default = "การพัฒนา"> <environment id = "การพัฒนา"> <transactionManager type = "jdbc"/> <dataSource type = "pooled"> value = "jdbc: mysql: // localhost: 3306/test"/> <property name = "ชื่อผู้ใช้" value = "root"/> <property name = "password" value = "root"/> </dataSource>
จากนั้นมี student_mapper.xml ส่วนใหญ่เป็นคำสั่ง SQL เฉพาะ:
<mapper namespace = "studentmapper"> <resultmap type = "student" id = "studentmap"> <id column = "student_id" คุณสมบัติ = "studentId" jdbctype = "จำนวนเต็ม" /> <result column = "student_name" resultmap = "studentmap"> select student_id, student_name จากนักเรียน; </select> <insert id = "insertstudent" useGeneratedKeys = "true" keyProperty = "studentId" parameterType = "นักเรียน" jdbcType = varchar}); </insert> </ mapper>
สร้าง mybatisutil.java ซึ่งใช้เพื่อสร้างองค์ประกอบ mybatis พื้นฐานบางอย่าง คลาสที่ตามมาสืบทอดคลาสนี้:
ระดับสาธารณะ mybatisutil {ป้องกัน sqlsessionfactory ssf; reader reader reader ที่ได้รับการป้องกัน; คงที่ {ลอง {reader = resources.getResourceAreder ("config.xml"); SSF = sqlSessionFactoryBuilder (reader) sqlsession getSqlsession () {return ssf.opensession ();}} ข้อกำหนดการพัฒนาระดับองค์กร:
1. คำจำกัดความและการใช้งานแยกต่างหาก
2. การพัฒนาแบบเลเยอร์โดยปกติแล้ว Dao-> บริการ-> คอนโทรลเลอร์มันไม่ได้ถูกตัดออกไปว่าชั้นหนึ่ง/หลายชั้นหรือเลเยอร์น้อยกว่าหนึ่งชั้นจะถูกเพิ่มตามสถานการณ์ที่เฉพาะเจาะจง
ดังนั้นก่อนอื่นเขียนอินเทอร์เฟซ studentdao.java:
Public Interface StudentDao {รายการสาธารณะ <Tudent> SelectAllstudents (); Int intertStudent (นักเรียนนักเรียน);} ในที่สุดเขียน studentdaoimpl.java เพื่อใช้อินเทอร์เฟซนี้ โปรดทราบว่าคุณต้องสืบทอดคลาส mybatisutil.java:
นักศึกษาระดับสาธารณะ DAOIMPL ขยาย MyBatisutil ใช้ studentdao {private Static String namespace สุดท้าย = "StudentMapper."; รายการสาธารณะ <Tudent> SelectAllstudents () {SQLSession SS = getSqlSession (); รายการ <Tudent> รายการ = ss.SelectList (namespace InsertStudent (นักเรียนนักเรียน) {SQLSession SS = GetSQlSession (); int i = ss.insert (namespace + "insertstudent", นักเรียน); // ss.commit (); ss.close (); return i;}}}; เขียนคลาสทดสอบ:
นักศึกษาชั้นเรียนสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {studentdao studentdao = นักศึกษาใหม่ daoimpl (); นักเรียนนักเรียน = นักเรียนใหม่ (); student.setStudentName ("Jack"); StudentDao.InsertStudent (นักเรียน); System.out.println ( Student.getStudentId ()); System.out.println ("---- แสดงนักเรียน ------"); รายการ <student> studentList = StudentDao.Selectallstudents (); สำหรับ (int i = 0, length = studentlist.size (); i <length; i ++) system.out.println (studentlist.get.get (i));}} ผลลัพธ์จะต้องว่างเปล่า
ฉันได้กล่าวว่าตัวอย่างนี้เป็นทั้งการตรวจสอบและการแนะนำเนื้อหาของเราในวันนี้ เหตุผลที่ทำให้สิ่งนี้ว่างเปล่าคือการดำเนินการแทรกได้เสร็จสิ้น แต่ mybatis จะไม่ช่วยให้เราส่งสิ่งต่าง ๆ โดยอัตโนมัติดังนั้นสิ่งที่แสดงจะว่างเปล่าตามธรรมชาติ ในกรณีนี้คุณต้องส่งการทำธุรกรรมด้วยตนเองผ่านวิธีการของ SQLSession นั่นคือเปิดความคิดเห็นในบรรทัดที่ 17 ของชั้นเรียน DudentDaoimpl.java
เพื่อให้ได้มากขึ้นนอกเหนือจากการดำเนินการแทรก Mybatis พื้นฐานตัวอย่างนี้ยังมีฟังก์ชั่นของการส่งคืนรหัสคีย์หลักที่แทรกบนพื้นฐานของการแทรก
ถัดไปใช้ฤดูใบไม้ผลิเพื่อจัดการสิ่ง MyBatis ซึ่งเป็นวิธีการจัดการสิ่งที่ใช้กันมากที่สุดในการพัฒนาระดับองค์กร
จัดการสิ่ง mybatis ด้วยฤดูใบไม้ผลิ
มีบทความมากมายบนอินเทอร์เน็ตเพื่ออธิบายสิ่งนี้และฉันได้ค้นหามาก แต่คัดลอกและวางซึ่งกันและกันหรือไม่อธิบายตัวอย่างทั้งหมดอย่างชัดเจน ผ่านส่วนนี้ฉันพยายามอธิบายวิธีใช้ฤดูใบไม้ผลิเพื่อจัดการสิ่ง mybatis
การใช้ฤดูใบไม้ผลิเพื่อจัดการสิ่ง MyBatis นอกเหนือจากถั่วโมดูลที่จำเป็นของฤดูใบไม้ผลิบริบทหลักการแสดงออกและการบันทึกคอมมอนส์ต้องใช้เนื้อหาต่อไปนี้ด้วย:
(1) mybatis-spring-1.x.0.jar นี่เป็นแพ็คเกจ JAR ที่จำเป็นสำหรับการรวมฤดูใบไม้ผลิ mybatis
(2) สามารถใช้พูลการเชื่อมต่อฐานข้อมูล DBCP และ C3P0 ได้ ฉันใช้ Druid ของอาลีบาบาที่นี่
(3) JDBC, TX, AOP, JDBC นั้นไม่ต้องพูดถึง TX และ AOP ใช้เพราะการสนับสนุนของฤดูใบไม้ผลิสำหรับการจัดการสิ่ง MyBatis นั้นทำได้ผ่าน AOP
(4) AOPALLIANCE.JAR นี่เป็นแพ็คเกจ JAR ที่จำเป็นในการใช้ Spring AOP
แพ็คเกจ JAR ด้านบนจะถูกดาวน์โหลดโดยใช้ Maven ผู้ที่ไม่ได้ใช้ Maven สามารถดาวน์โหลดได้ใน CSDN คุณสามารถค้นหาได้
ในไฟล์กำหนดค่า config.xml ของ mybatis การเชื่อมต่อ JDBC สามารถลบออกได้และสามารถเก็บส่วน typealiases ได้เท่านั้น:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-configig.dtd" type = "org.xrq.domain.student"/> </typealiases> </การกำหนดค่า>
ให้ฉันพูดถึงว่า mybatis ไฟล์การกำหนดค่าอื่น student_mapper.xml ไม่จำเป็นต้องเปลี่ยนแปลง ถัดไปเขียนไฟล์การกำหนดค่าสปริงและฉันตั้งชื่อมัน Spring.xml:
<? xml version = "1.0" encoding = "utf-8"?> <ถั่ว xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://www.springframework.org/schema/beans mlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http:/ http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsdhttp://www.springframeworwork.orgorork http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"><!-การกำหนดค่าคำอธิบายประกอบ-> <tx: transaction-driven transaction-manager = "TransactionManager"/> พูลการเชื่อมต่อฐานข้อมูลใช้ druid ของอาลีบาบา-> <bean id = "dataSource" init-method = "init" destroy-method = "close"> <property name = "url" value = "jdbc: mysql: // localhost: 3306/test"/> < id = "sqlsessionfactory"> <property name = "การกำหนดค่า" value = "classpath: config.xml" /> <property name = "mapperlocations" value = "classpath:*_ mapper.xml" /> <property name = "dataSource" ref = "DataSource" /> name = "dataSource" ref = "dataSource"/> </ebean> </epeans>
ส่วนใหญ่รวมถึงตัวจัดการธุรกรรมและพูลการเชื่อมต่อฐานข้อมูล
นอกจากนี้เราจะเห็นว่ามี SQLSessionFactory เพื่อนที่ใช้ mybatis ต้องคุ้นเคยกับชั้นเรียนนี้ มันถูกใช้เพื่อกำหนดค่าสภาพแวดล้อม mybatis มีสองแอตทริบิวต์การกำหนดค่าและ mapperlocations ใน SQLSessionFactory ตามชื่อหมายถึงมันแสดงถึงตำแหน่งของไฟล์การกำหนดค่าและตำแหน่งของไฟล์การแมป ที่นี่ตราบใดที่เส้นทางได้รับการกำหนดค่าอย่างถูกต้องสปริงจะโหลดไฟล์การกำหนดค่าทั้งสองนี้โดยอัตโนมัติ
จากนั้นสิ่งที่คุณต้องการแก้ไขคือคลาสการใช้งานของ DAO ในเวลานี้คุณจะไม่ได้รับมรดก MyBatisutil ก่อนหน้านี้อีกต่อไป แต่สืบทอด SQLSessionDaosupport.java จาก MyBatis-spring-1.x.0.jar รหัสเฉพาะมีดังนี้:
@RepositoryPublic Class StudentDaoimpl ขยาย SQLSessionDaosupport โดยใช้ studentdao {private Static String namespace สุดท้าย = "StudentMapper.";@ResourcePublic Void SetsqlSessionFactory (SQLSessionFactory SelectAllstudents () {return getsqlsession (). selectList (namespace + "selectallstudents");} public int interstudent (นักเรียนนักเรียน) {return getsqlsession (). แทรก (namespace + "insertstudent", นักเรียน);}}}}}}}}}}}มีการใช้คำอธิบายประกอบสองรายการที่นี่มาพูดคุยกันแยกกัน
(1) @Repository คำอธิบายประกอบนี้เหมือนกับ @component, @Controller และคำอธิบายประกอบ @Service ที่พบบ่อยที่สุดของเราซึ่งทั้งหมดสามารถประกาศคลาสเป็นถั่วฤดูใบไม้ผลิ ความแตกต่างของพวกเขาไม่ได้อยู่ในความหมายเฉพาะ แต่มีมากขึ้นในการวางตำแหน่งของคำอธิบายประกอบ ดังที่ได้กล่าวไว้ก่อนหน้านี้แอปพลิเคชันระดับองค์กรมุ่งเน้นไปที่แนวคิดของการพัฒนาลำดับชั้นดังนั้นควรเข้าใจคำอธิบายประกอบที่คล้ายกันทั้งสี่นี้ดังนี้:
•@repository คำอธิบายประกอบสอดคล้องกับเลเยอร์การคงอยู่คือเลเยอร์ DAO ซึ่งใช้ในการโต้ตอบโดยตรงกับฐานข้อมูล โดยทั่วไปวิธีการสอดคล้องกับคำสั่ง SQL เฉพาะ
•@คำอธิบายประกอบบริการซึ่งสอดคล้องกับเลเยอร์บริการคือเลเยอร์บริการเป็นฟังก์ชันของการรวมคำสั่ง SQL เดี่ยว/หลายรายการ แน่นอนถ้ามันง่ายคุณจะเรียกวิธีการของเลเยอร์ DAO โดยตรง
•@คำอธิบายประกอบคอนโทรลเลอร์ซึ่งสอดคล้องกับเลเยอร์ควบคุมนั่นคือเลเยอร์ควบคุมในโหมดการออกแบบ MVC ฟังก์ชั่นของมันคือการรับคำขอของผู้ใช้โทรบริการที่แตกต่างกันเพื่อรับข้อมูลตามคำขอและรวมข้อมูลตามข้อกำหนดและห่อกลับไปที่ส่วนหน้า
•@Component Annotation ซึ่งสอดคล้องกับแนวคิดของส่วนประกอบมากขึ้น หากถั่วไม่ทราบว่ามันเป็นของเลเยอร์คุณสามารถใช้คำอธิบายประกอบ @component เพื่อเพิ่มคำอธิบายประกอบได้
สิ่งนี้ยังสะท้อนให้เห็นถึงข้อดีอย่างหนึ่งของคำอธิบายประกอบ: การเห็นชื่อและรู้ถึงความหมายนั่นคือการเห็นคำอธิบายประกอบนี้คุณรู้หน้าที่ของคลาสนี้อย่างคร่าวๆนั่นคือการวางตำแหน่งในโครงการทั้งหมด
(2) @Resource คำอธิบายประกอบและคำอธิบายประกอบ @autowired นี้มีความหมายเหมือนกันและทั้งคู่สามารถฉีดโดยอัตโนมัติด้วยแอตทริบิวต์แอตทริบิวต์ เนื่องจาก SQLSessionFactory เป็นแกนหลักของ mybatis จึงได้รับการประกาศใน Spring.xml ดังนั้นถั่วที่มี ID "SQLSessionFactory" ถูกฉีดที่นี่ผ่านคำอธิบายประกอบ @Resource หลังจากนั้น SQLSession สามารถรับได้ผ่านวิธี GetSQLSession () และข้อมูลจะถูกเพิ่มลบแก้ไขและตรวจสอบ
ในที่สุดก็ไม่มีอะไรมากไปกว่าการเขียนคลาสทดสอบเพื่อทดสอบ:
Public Class StudentTest {โมฆะสาธารณะคงที่หลัก (String [] args) {ApplicationContext AC = ใหม่ classPathxMlApplicationContext ("Spring.xml"); StudentDao StudentDao = (StudentDao) ac.getBean ("studentDaoImpl"); StudentDao.InsertStudent (นักเรียน); System.out.println ("j =" + j + "/n"); สำหรับ (int i = 0, length = studentlist.size (); i <length; i ++) system.out.println (studentlist.get.get (i));}} เนื่องจากชั้นเรียน studentdaoimpl.java ใช้คำอธิบายประกอบ @repository และไม่ได้ระบุนามแฝงชื่อของนักเรียน daoimpl.java ในคอนเทนเนอร์ฤดูใบไม้ผลิคือ "ตัวอักษรตัวพิมพ์เล็กตัวแรก + ตัวอักษรที่เหลืออยู่" นั่นคือ "StudentDaoimpl"
หลังจากเรียกใช้โปรแกรมคุณจะเห็นว่านักเรียนใหม่ถูกสำรวจบนคอนโซลนั่นคือนักเรียนถูกแทรกลงในฐานข้อมูลโดยตรง ไม่มีการกระทำหรือย้อนกลับในกระบวนการทั้งหมด พวกเขาทั้งหมดถูกนำไปใช้ในฤดูใบไม้ผลิ นี่คือการใช้ฤดูใบไม้ผลิเพื่อจัดการสิ่งต่าง ๆ บน mybatis
postscript
บทความนี้จะทบทวนการใช้ mybatis ขั้นพื้นฐานและใช้ฤดูใบไม้ผลิเพื่อจัดการสิ่งต่าง ๆ บน mybatis และให้ตัวอย่างรหัสโดยละเอียดเพิ่มเติม เพื่อนที่ต้องการสามารถศึกษาได้ตามรหัส จากบทความนี้ฉันจะเขียนบทความในภายหลังเพื่ออธิบายการใช้งานการจัดการสิ่งของหลายข้อมูลระหว่างตารางเดี่ยวและหลายตาราง ข้อกำหนดนี้ยังเป็นข้อกำหนดทั่วไปในองค์กรและแอปพลิเคชัน