การรวมฤดูใบไม้ผลิและ mybatis
ไอเดียบูรณาการ
ฤดูใบไม้ผลิจำเป็นต้องจัดการ SQLSessionFactory ผ่าน Singleton
Spring และ MyBatis รวมเข้าด้วยกันเพื่อสร้างวัตถุพร็อกซีและใช้ SQLSessionFactory เพื่อสร้าง SQLSession (การรวม Spring and MyBatis เสร็จสมบูรณ์โดยอัตโนมัติ)
Mappers ของเลเยอร์การคงอยู่จำเป็นต้องได้รับการจัดการในฤดูใบไม้ผลิ
รวมสภาพแวดล้อม
สร้างโครงการ Java ใหม่ (ใกล้กับโครงสร้างทางวิศวกรรมที่พัฒนาจริง)
แพ็คเกจขวด:
MyBatis3.2.7 แพ็คเกจ JAR
แพ็คเกจ Spring3.2.0 Jar
แพ็คเกจ MyBatis และ Spring Integration: การรวม Ibatis และฤดูใบไม้ผลิก่อนฤดูใบไม้ผลิและตอนนี้ Mybatis และ Spring Integration จัดทำโดย MyBatis
แพ็คเกจขวดทั้งหมด (รวมถึง SpringMVC)
โครงสร้างวิศวกรรม
ขั้นตอนที่ 1: รวมและกำหนดค่า SQLSessionFactory
กำหนดค่า SQLSessionFactory และแหล่งข้อมูลใน ApplicationContext.xml
SQLSessionFactory อยู่ภายใต้แพ็คเกจการรวมของ MyBatis และ Spring
<!-การโหลดไฟล์การกำหนดค่า-> <บริบท: สถานที่ตั้งสถานที่ตั้งตำแหน่ง = "classpath: db.properties" /> <!-แหล่งข้อมูลใช้ dbcp-> <bean id = "dataSource" ทำลาย -method = "ปิด"> value = "$ {jdbc.url}" /> <property name = "username" value = "$ {jdbc.username}" /> <property name = "รหัสผ่าน" value = "$ {jdbc.password}" /> <property name = "maxactive" value = "10" /> < -> <bean id = "sqlsessionfactory"> <!-โหลดไฟล์กำหนดค่า mybatis-> <property name = "configlocation" value = "mybatis /sqlmapconfig.xml" /> <!การพัฒนาต้นฉบับ (หลังจากรวมกับฤดูใบไม้ผลิ)
sqlmap/user.xml
โหลด user.xml ใน sqlmapconfig.xml
DAO (ใช้การสืบทอดคลาส SQLSessionDaosupport)
ก่อนหน้านี้คลาสการใช้งานอินเทอร์เฟซ DAO จำเป็นต้องฉีด SQLSessoInfactory และฉีดผ่านฤดูใบไม้ผลิ
ที่นี่เราใช้ Spring เพื่อประกาศวิธีการกำหนดค่าและกำหนดค่าถั่วของ DAO:
ให้ userdaoimpl ใช้คลาสที่สืบทอดมาจาก SQLSessionDaosupport
กำหนดค่า dao
กำหนดค่าอินเทอร์เฟซ DAO ใน ApplicationContext.xml
<!-อินเทอร์เฟซ DAO ดั้งเดิม-> <bean id = "userdao"> <property name = "SQLSessionFactory" ref = "SQLSessionFactory"/> </ebean>
ขั้นตอนการทดสอบ
source_folder/userdaoimpltest.javapublic คลาส userdaoimpltest {private ApplicationContext ApplicationContext; // รับสปริงคอนเทนเนอร์ในวิธีการตั้งค่า @beforepublic void setup () โยนข้อยกเว้น {applicationcontext = new classPathxMlApplicationContext {userdao userdao = (userdao) applicationcontext.getBean ("userdao"); // โทรหาผู้ใช้ผู้ใช้ผู้ใช้ = userdao.finduserbyid (1); system.out.println (ผู้ใช้);}}}}}}การพัฒนาตัวแทนผู้ทำแผนที่
usermapper.xml และ usermapper.java
เพียงคัดลอกโครงการก่อนหน้าและลบเส้นทางแพ็คเกจ
สร้างวัตถุพร็อกซีผ่าน MapperFactoryBean
เนื่องจาก UserMapper ไม่ใช่ประเภทอินเทอร์เฟซคุณต้องใช้ MapperFactoryBean เพื่อสร้างประเภทอินเตอร์เฟส
ปัญหาเกี่ยวกับวิธีนี้:
มันจะต้องมีการกำหนดค่าสำหรับแต่ละ mapper, ลำบาก
การสแกน Mapper ผ่าน MapperscannerConfigurer (แนะนำ)
* หลังจากกำหนดค่าเส้นทางการสแกน Mapper ผ่านคุณสมบัติ BasePackage ไม่จำเป็นต้องกำหนดค่าเส้นทางการสแกนใน SQLMApperConfig.xml
คุณสมบัติ SQLSessionFactoryBeanName ถูกใช้ที่นี่เนื่องจากหากมีการกำหนดค่าคุณสมบัติ SQLSessionFactory ไฟล์การกำหนดค่าฐานข้อมูลและการกำหนดค่าแหล่งข้อมูลจะไม่ถูกโหลดก่อน (db.properties)
รหัสทดสอบ
วิศวกรรมย้อนกลับ
MyBaits ต้องการโปรแกรมเมอร์เพื่อเขียนคำสั่ง SQL ด้วยตนเอง MyBatis Official จัดเตรียมวิศวกรรมย้อนกลับเพื่อสร้างรหัสที่ต้องการโดยอัตโนมัติสำหรับการดำเนินการ mybatis (mapper.java, mapper.xml, po .. )
ในการพัฒนาองค์กรจริงวิธีการวิศวกรรมย้อนกลับที่ใช้กันทั่วไป: สร้างรหัส Java เนื่องจากตารางของฐานข้อมูล
ดาวน์โหลดวิศวกรรมย้อนกลับ
วิธีใช้ (สามารถใช้) เรียกใช้วิศวกรรมย้อนกลับ
ขอแนะนำให้ใช้วิธีการโปรแกรม Java และไม่ต้องพึ่งพาเครื่องมือการพัฒนา
สร้างไฟล์การกำหนดค่ารหัส (4 สถานที่ที่ต้องแก้ไข)
สถานที่ที่มีการสร้างคลาส PO: cn.itcast.ssm.po
ตำแหน่งที่มีการสร้างไฟล์การแมป Mapper: cn.itcast.ssm.mapper
ตำแหน่งของอินเทอร์เฟซ Mapper ที่สร้างขึ้น: cn.itcast.ssm.mapper
ระบุตารางฐานข้อมูล:
<table tablename = "items"> </table> <table tablename = "คำสั่งซื้อ"> </table> <table tablename = "orderdetail"> </bable> <table tablename = "ผู้ใช้"> </table> <? xml เวอร์ชัน = "1.0" การกำหนดค่าเครื่องกำเนิดไฟฟ้า 1.0 // en "" http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd "> <seneratorConfiguration> <context id =" testTables "targeRuntime =" myBatis3 "> <ความคิดเห็น name = "suppressAllComments" value = "true"/> </commentGenerator> <!-ข้อมูลเกี่ยวกับการเชื่อมต่อฐานข้อมูล: คลาสไดรเวอร์ที่อยู่การเชื่อมต่อชื่อผู้ใช้รหัสผ่าน-> <jdbcconnection driverclass = "com.mysql.jdbc.driver" การเชื่อมต่อ " userId = "root" password = "mysql"> </jdbcconnection> <!-<jdbcconnection driverclass = "oracle.jdbc.oracledriver" การเชื่อมต่อ = "jdbc: oracle:@127.0.0.1: 1521: yycg" ค่าเริ่มต้นเท็จ, decimal และตัวเลขตัวเลขผิดพลาดแก้ไขเป็นจำนวนเต็ม เมื่อเป็นจริงประเภททศนิยมและตัวเลขของ JDBC จะแก้ไขให้เป็น java.math.bigdecimal-> <javatyperesolver> <property name = "forceBigDecimals" value = "false" /> </javatyperesolver> <! targetPackage = "cn.itcast.ssm.po" targetProject = "./ src"> <!-enablesubpackages: ไม่ว่าจะใช้ schema เป็นคำต่อท้ายของแพ็คเกจ-> <ชื่อคุณสมบัติ = "eNablesubPackages" ค่า = "false" /> <! /> </javamodelGenerator> <!-โครงการเป้าหมาย: ที่ไฟล์แผนที่ Mapper ถูกสร้างขึ้น-> <sqlmapgenerator targetPackage = "cn.itcast.ssm.mapper" targetProject = "./ src"> <! /> </SQLMAPGENERATOR> <!-TargetPackage: ตำแหน่งของการสร้างอินเตอร์เฟสแม็ปเปอร์-> <javaclientGenerator type = "xmlmapper" targetPackage = "cn.itcast.ssm.mapper" targetProject = "./ src"> <! value = "false"/> </javaclientGenerator> <!-ระบุตารางฐานข้อมูล-> <table tablename = "รายการ"> </table> <table tablename = "คำสั่งซื้อ"> </table> <table tablename = "OrderDetail"> </table>
ดำเนินการเครื่องกำเนิดไฟฟ้า
รหัสที่สร้างขึ้น
ใช้รหัสที่สร้างขึ้น
คุณต้องคัดลอกรหัสที่สร้างขึ้นในโครงการที่สร้างขึ้นในโครงการของคุณเอง
วิธีการทดสอบใน itemsmapper
// การสืบค้นเงื่อนไขที่กำหนดเอง @TestPublic เป็นโมฆะ testSelectByExample () {itemSexample itemSexample = itemSexample ใหม่ (); // สร้างเงื่อนไขการสืบค้นผ่านเกณฑ์ itemsexample.criteria criteria = itemsexample itemsMapper.SelectByExample (itemsexample); system.out.println (รายการ);} // คำถาม @testpublic เป็นโมฆะตามคีย์หลัก testselectbyprimarykey () {items = itemper.selectbyprimarykey (1); system.out.out.println (รายการ); รายการรายการรายการรายการ = รายการใหม่ (); items.setName ("มือถือ"); items.setPrice (999f); itemsMapper.Insert (รายการ);} // อัปเดตข้อมูล @TestPublic เป็นโมฆะ testUpDateByPrimaryKey () {// อัปเดตฟิลด์ทั้งหมด Cup "); itemsMapper.updateByPrimaryKey (รายการ); // หากฟิลด์ขาเข้าไม่ว่างเปล่าให้ใช้วิธีนี้ในการอัปเดตแบทช์ ไม่จำเป็นต้องสืบค้นก่อนจากนั้นอัปเดต //itemsmapper.updateByBremaryKeySelective(record);}ข้างต้นเป็นการวิเคราะห์สั้น ๆ เกี่ยวกับการรวมและวิศวกรรมย้อนกลับของฤดูใบไม้ผลิและ mybatis ซึ่งฉันหวังว่าจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!