โครงการ MyBatis-Spring
ปัจจุบันโครงการอินเทอร์เน็ต Java ส่วนใหญ่ถูกสร้างขึ้นโดยใช้ Spring MVC + Spring + MyBatis
การใช้สปริง IOC สามารถจัดการทรัพยากร Java ต่างๆได้อย่างมีประสิทธิภาพและบรรลุฟังก์ชั่นปลั๊กแอนด์เพลย์ ผ่านเฟรมเวิร์กสปริง AOP การทำธุรกรรมฐานข้อมูลสามารถมอบให้กับการจัดการสปริงกำจัดส่วนใหญ่ของรหัสการทำธุรกรรมและเมื่อรวมกับความยืดหยุ่นสูงกำหนดค่าได้และคุณสมบัติ SQL ที่ดีที่สุดของ mybatis มันเป็นไปได้ที่จะสร้างเว็บไซต์ขนาดใหญ่ที่มีประสิทธิภาพสูง
ไม่ต้องสงสัยเลยว่าสองกรอบหลักคือ MyBatis และฤดูใบไม้ผลิได้กลายเป็นกรอบหลักของเทคโนโลยีอินเทอร์เน็ต Java พวกเขามีการทดสอบปริมาณข้อมูลขนาดใหญ่และคำขอขนาดใหญ่และมีการใช้กันอย่างแพร่หลายในระบบอินเทอร์เน็ต การใช้ mybatis-spring ทำให้เลเยอร์ธุรกิจและเลเยอร์โมเดลแยกออกจากกันได้ดีขึ้น ในเวลาเดียวกันการใช้ mybatis ในสภาพแวดล้อมฤดูใบไม้ผลินั้นง่ายกว่าประหยัดรหัสจำนวนมากและคุณยังสามารถหลีกเลี่ยงการใช้วัตถุเช่น SQLSessionFactory และ SQLSession เนื่องจาก MyBatis-Spring ห่อหุ้มพวกเขาไว้สำหรับเรา
ข้อความที่ตัดตอนมาจาก: "Java EE Internet Lightwork Framework Integrated Integrated Development"
ขั้นตอนที่ 1: สร้างโครงการทดสอบ
ขั้นตอนแรกคือการสร้างโครงการ WebProject ใหม่ที่เรียกว่า [MyBatisandspring] ใน IDEA:
จากนั้นสร้างแพ็คเกจเปล่า 4 ชุดใน [SRC]:
จากนั้นสร้างโฟลเดอร์ต้นทางใหม่ [config] เพื่อวางไฟล์การกำหนดค่าทรัพยากรต่างๆ:
จากนั้นสร้างโฟลเดอร์ความปลอดภัยเริ่มต้น [Web-INF] ใหม่ภายใต้โฟลเดอร์ [Web] และสร้าง [คลาส] และ [lib] ภายใต้และเปลี่ยนตำแหน่งเอาต์พุตของโครงการภายใต้ [คลาส]:
โครงสร้างเริ่มต้นที่สมบูรณ์ของโครงการมีดังนี้:
ขั้นตอนที่ 2: แนะนำแพ็คเกจ Jar Dependency
ขั้นตอนที่สองคือการเตรียมแพ็คเกจขวดการพึ่งพาของโครงการ:
วางแพ็คเกจ JAR ที่ระบุไว้ข้างต้นในโฟลเดอร์ [LIB] ภายใต้โฟลเดอร์ [WEB-INF] จากนั้นเพิ่มการพึ่งพา
ขั้นตอนที่ 3: เขียนไฟล์การกำหนดค่าสปริง
ขั้นตอนที่สามคือการเขียนไฟล์การกำหนดค่าสปริง:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: context = "http://www.springframework.org/schema/context" XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <! id = "dataSource"> <property name = "driverclassName" value = "$ {jdbc.driver}"/> <property name = "url" value = "$ {jdbc.url}"/> <property name = "username" value = "$ {jdbc.username}" <!-SQLSessionFactory-> <bean id = "SQLSessionFactory"> <!-โหลดไฟล์การกำหนดค่า mybatis-> <property name = "การกำหนดค่า" value = "mybatis/sqlmapconfig.xml"/> <!ขั้นตอนที่ 4: เขียนไฟล์กำหนดค่า MyBatis
ขั้นตอนที่ 4: เขียนไฟล์การกำหนดค่าส่วนกลางของ mybatis ภายใต้แพ็คเกจ [mybatis] sqlmapconfig.xml:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" สวิตช์-> <การตั้งค่าชื่อ = "lazyloadingenabled" value = "true"/> <!-เปลี่ยนการโหลดที่ใช้งานอยู่เป็นโหลดแบบพาสซีฟ (เช่นการโหลดตามความต้องการ)-> <การตั้งค่าชื่อ = "aggressivelazyloading" value = "false"/> <! <typealiases> <package name = "cn.wmyskxz.pojo"/> </typealiases> <!-โหลดไฟล์แผนที่-> <mappers> <!-โหลดไฟล์แผนที่หนึ่งไฟล์ผ่านวิธีทรัพยากร-> <mapper resource = "sqlmap/usermapper.xml"/> <! </mappers> </การกำหนดค่า>
ในไฟล์กำหนดค่านี้:
ขั้นตอนที่ 5: การเขียนแผนที่และไฟล์การกำหนดค่าอื่น ๆ
ขั้นตอนที่ 5: เขียนไฟล์การแมปแผนที่ ที่นี่ชื่อของไฟล์การแมป Mapper ยังคงถูกกำหนดเป็น "usermapper.xml" (ซึ่งสอดคล้องกับการกำหนดค่าใน sqlmapconfig.xml) ในการทดสอบเอฟเฟกต์มีการกำหนดค่าแผนที่ SQL แบบสอบถามเพียงตัวเดียวเท่านั้น:
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd parameterType = "_ int" resultType = "ผู้ใช้"> เลือก * จากผู้ใช้โดยที่ id = #{id} </select> </mapper>ในการกำหนดค่านี้พารามิเตอร์เอาต์พุตจะถูกแมปกับ "ผู้ใช้" เนื่องจากคลาสเอนทิตีภายใต้แพ็คเกจ "cn.wmyskxz.pojo" ได้รับการกำหนดค่าใน SQLMAPConfig.xml ก่อนที่จะใช้นามแฝง (นั่นคือชื่อคลาส "cn.wmyskxz.pojo" แพ็คเกจ:
แพ็คเกจ cn.wmyskxz.pojo; นำเข้า java.io.serializable; ผู้ใช้ระดับสาธารณะใช้ serializable {ID ส่วนตัว INT; ชื่อผู้ใช้สตริงส่วนตัว; / * getter และ setter */}การใช้อินเทอร์เฟซแบบอนุกรมคือการเตรียมตัวสำหรับการใช้งานพร็อกซีแบบไดนามิกของ Mapper ในภายหลังและไม่มีการใช้พร็อกซีแบบไดนามิกที่นี่
ข้อมูลการเชื่อมต่อฐานข้อมูลได้รับการกำหนดค่าในทรัพยากรฐานข้อมูล "db.properties" และกำหนดค่าในรูปแบบของ "key = value" สตริงใช้ "$ {}" เพื่อรับค่าที่สอดคล้องกับคีย์:
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: // localhost: 3306/mybatis? ตัวละคร = utf-8jdbc.username = rootjdbc.password = root
นอกจากนี้การกำหนดค่าบันทึกเป็นเช่นเดียวกับการกำหนดค่าก่อนหน้านี้ดังนั้นฉันจึงวางโดยตรง:
# การกำหนดค่าการบันทึกทั่วโลก# ในสภาพแวดล้อมการพัฒนาระดับการบันทึกควรตั้งค่าเป็น debug และควรตั้งค่าสภาพแวดล้อมการผลิตเป็นข้อมูลหรือ errorlog4j.rootlogger = debug, stdout# คอนโซล เอาท์พุท ... log4j.appender.stdout = org.apache.log4j.consoleAppenderlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout.layout.conversionpatter
ขั้นตอนที่ 6: เขียนเลเยอร์ Dao
ขั้นตอนที่ 6: เขียนเลเยอร์วัตถุการเข้าถึงข้อมูล
เนื่องจากโครงการนี้เพียงสอบถามผู้ใช้ผู้ใช้จึงมีคลาสเดียวในชั้น DAO อินเทอร์เฟซอินเตอร์เฟสของเลเยอร์ DAO ถูกสร้างขึ้นภายใต้แพ็คเกจ "CN.WMYSKXZ" ซึ่งกำหนดวิธี FindUserById และพารามิเตอร์คือค่า ID ของผู้ใช้ (ประเภท int):
แพ็คเกจ cn.wmyskxz.dao; นำเข้า cn.wmyskxz.pojo.user; อินเตอร์เฟสสาธารณะ userdao {// ข้อมูลผู้ใช้แบบสอบถามตาม ID ผู้ใช้สาธารณะ FinduserById (ID int) โยนข้อยกเว้น;}}จากนั้นสร้างคลาสการใช้งานอินเตอร์เฟส UserDAO USERDAOIMPL ภายใต้แพ็คเกจเดียวกัน:
แพ็คเกจ cn.wmyskxz.dao; นำเข้า cn.wmyskxz.pojo.user; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.mybatis.spring.support.sqlsessiondaosupport; ผู้ใช้ findUserById (ID int) พ่นข้อยกเว้น {// สืบทอดคลาส SQLSessionDaosupport และผ่าน this.getSqlSession () รับ sqlsession sqlsession sqlsession = this.getSqlSession (); ผู้ใช้ผู้ใช้ = sqlSession.Selectone ("test.finduserById", id); ผู้ใช้ส่งคืน; -มีคำอธิบายเล็กน้อย:
<!-อินเทอร์เฟซ DAO ดั้งเดิม-> <bean id = "userdao"> <property name = "SQLSessionFactory" ref = "SQLSessionFactory"/> </ebean>
หมายเหตุ: หลังจากคลาสการใช้งาน DAO สืบทอดคลาสหลักของ SQLSessionDaosupport ไม่จำเป็นต้องกำหนดวิธีการที่จะได้รับคลาสอินสแตนซ์เซสชัน SQLSession ด้วยตัวเอง คลาสแม่จะโหลดข้อมูลแหล่งข้อมูลโดยค่าเริ่มต้นและจัดทำวิธีการเพื่อรับคลาส SQLSession
ขั้นตอนที่ 7: เขียนคลาสทดสอบบริการ
สร้างคลาสทดสอบ [userserviceTest] ภายใต้แพ็คเกจ "cn.wmyskxz.test":
แพ็คเกจ cn.wmyskxz.test; นำเข้า cn.wmyskxz.dao.userdao; นำเข้า cn.wmyskxz.pojo.user; นำเข้า org.junit.before; นำเข้า org.junit.test; นำเข้า org.springframework.context org.springframework.context.support.classpathxmlapplicationContext; ผู้ใช้ระดับสาธารณะผู้ใช้งาน {Private ApplicationContext ApplicationContext; // รับวัตถุไฟล์การกำหนดค่าสปริงก่อนก่อนที่จะดำเนินการวิธีทดสอบ // คำอธิบายประกอบ @Before เรียกวิธีนี้ก่อนที่จะดำเนินการวิธีทดสอบทั้งหมดของคลาสนี้ @Before Public Void Setup () โยนข้อยกเว้น {ApplicationContext = ใหม่ classPathxMlApplicationContext ("ClassPath: Spring/ApplicationContext.xml"); } @Test โมฆะสาธารณะ Public TestFinduserById () พ่นข้อยกเว้น {// รับวัตถุ UserDao โดยการกำหนดค่าวัตถุทรัพยากร USERDAO USERDAO = (USERDAO) ApplicationContext.getBean ("userDao"); // โทรหาผู้ใช้ผู้ใช้ = UserDao.FinduserById (1); // เอาท์พุทข้อมูลผู้ใช้ System.out.println (user.getId () + ":" + user.getUserName ()); -เรียกใช้วิธีการทดสอบและผลลัพธ์ผลลัพธ์มีดังนี้:
การใช้งาน Proxy + คำอธิบายประกอบแบบไดนามิก
โปรแกรมตัวอย่างข้างต้นยังไม่เสร็จสมบูรณ์โดยใช้พร็อกซีและคำอธิบายประกอบแบบไดนามิก มาลองใช้พร็อกซีและคำอธิบายประกอบแบบไดนามิก:
ขั้นตอนที่ 1: เขียน userQueryMapper
สร้างอินเทอร์เฟซพร็อกซีใหม่ [userQueryMapper] ภายใต้ [MAPPER] และใช้คำอธิบายประกอบ:
แพ็คเกจ cn.wmyskxz.mapper; นำเข้า cn.wmyskxz.pojo.user; นำเข้า org.apache.ibatis.annotations.select; อินเตอร์เฟสสาธารณะ userQueryMapper {@select ("เลือก * จากผู้ใช้ที่ id = #}")หมายเหตุ: โดยค่าเริ่มต้นชื่อของถั่วคือ UserQueryMapper (เช่นตัวอักษรตัวแรกคือตัวพิมพ์เล็ก)
ตอนนี้เรามีคลาสพร็อกซีแล้วเราต้องแจ้งสปริงเพื่อสแกนคลาสนี้ที่นี่ Mapper ต้องใช้เครื่องสแกนพิเศษเพื่อสแกนวัตถุการกำหนดค่า:
<!-สแกนเนอร์ Mapper-> <Bean> <!-สแกนส่วนประกอบภายใต้แพ็คเกจ cn.wmyskxz.mapper-> <property name = "basepackage" value = "cn.wmyskxz.mapper"/> </epean>
ขั้นตอนที่ 2: เขียนคลาสทดสอบ
เวลานี้เราไม่ได้ดึงวัตถุ UserDao อีกต่อไป แต่ Mapper Proxy Object Object UserQueryMapper ที่กำหนดไว้:
แพ็คเกจ cn.wmyskxz.test; นำเข้า cn.wmyskxz.mapper.userquerymapper; นำเข้า cn.wmyskxz.pojo.user; นำเข้า org.junit.before; นำเข้า org.junit.test; org.springframework.context.support.classpathxmlapplicationContext; ผู้ใช้ระดับสาธารณะผู้ใช้งาน {Private ApplicationContext ApplicationContext; // รับวัตถุไฟล์การกำหนดค่าสปริงก่อนก่อนที่จะดำเนินการวิธีทดสอบ // คำอธิบายประกอบ @Before เรียกวิธีนี้ก่อนที่จะดำเนินการวิธีทดสอบทั้งหมดของคลาสนี้ @Before Public Void Setup () โยนข้อยกเว้น {ApplicationContext = ใหม่ classPathxMlApplicationContext ("ClassPath: Spring/ApplicationContext.xml"); } @Test โมฆะสาธารณะ Public TestFinduserById () พ่นข้อยกเว้น {// รับวัตถุ UserDao โดยการกำหนดค่าวัตถุทรัพยากร UserQueryMapper userQueryMapper = (userQueryMapper) ApplicationContext.getBean ("userQueryMapper"); // โทรหาผู้ใช้เมธอดผู้ใช้ userdao ผู้ใช้ = userQueryMapper.finduserById (1); // เอาท์พุทข้อมูลผู้ใช้ System.out.println (user.getId () + ":" + user.getUserName ()); -เรียกใช้วิธีการทดสอบและรับผลลัพธ์ที่ถูกต้อง:
คุณจะเห็นว่าผลลัพธ์การสืบค้นนั้นเหมือนกับตัวแทนที่ไม่ใช่ผู้ติดเชื้อก่อนหน้า
สรุป
ด้านบนเป็นวิธีการรวมที่สมบูรณ์แบบระหว่าง MyBatis และ Spring ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!