เกี่ยวกับเครื่องกำเนิด mybatis
MyBatis Generator (MBG) เป็นตัวสร้างรหัส mybatis mybatis และ Ibatis มันสามารถสร้างรหัสสำหรับ mybatis รุ่นต่างๆและรหัสหลังจาก Ibatis 2.2.0 เขาสามารถตรวจสอบตาราง (หรือตาราง) ของฐานข้อมูลจากนั้นสร้างวัตถุพื้นฐานที่สามารถใช้ในการเข้าถึงตาราง (หลาย) ของตาราง ด้วยวิธีนี้ไม่จำเป็นต้องใช้วัตถุและไฟล์การกำหนดค่าเมื่อโต้ตอบกับตารางฐานข้อมูล MBG แก้ปัญหา CRUD ง่าย ๆ (แทรก, การสืบค้น, การอัปเดต, ลบ) การดำเนินงานที่มีผลกระทบมากที่สุดในการดำเนินการฐานข้อมูล คุณยังต้องเขียนด้วยลายมือ SQL และวัตถุในแบบสอบถามสหพันธ์และขั้นตอนที่เก็บไว้
เครื่องกำเนิด mybatis จะสร้าง:
โครงสร้างตารางการจับคู่ Java Pojos อาจรวมถึง:
จะมีความสัมพันธ์การสืบทอดที่เหมาะสมระหว่างชั้นเรียนเหล่านี้ โปรดทราบว่าเครื่องกำเนิดไฟฟ้าสามารถกำหนดค่าเพื่อสร้างลำดับชั้นของ pojos ประเภทต่าง ๆ ตัวอย่างเช่นหากคุณต้องการคุณอาจเลือกที่จะสร้างวัตถุเอนทิตีแยกต่างหากสำหรับแต่ละตาราง
MyBatis/Ibatis เข้ากันได้กับไฟล์ XML SQL-mapping MBG สร้าง SQL ในการกำหนดค่าสำหรับการดำเนินการ CRUD อย่างง่ายสำหรับแต่ละตาราง คำสั่ง SQL ที่สร้างขึ้นรวมถึง:
ขึ้นอยู่กับโครงสร้างของตารางข้อความที่สร้างขึ้นจะแตกต่างกันไป (ตัวอย่างเช่นหากไม่มีคีย์หลักในตารางจากนั้น MBG จะไม่สร้างการอัปเดตด้วยวิธีคีย์หลัก)
คลาสไคลเอนต์ Java จะใช้วัตถุข้างต้นอย่างเหมาะสมและเป็นทางเลือกเมื่อสร้างคลาสไคลเอนต์ Java MBG จะสร้างคลาสไคลเอนต์ต่อไปนี้สำหรับ MyBatis 3.x:
คลาสอินเทอร์เฟซ Mapper ที่สามารถใช้กับ MyBatis 3.x
MBG จะสร้างคลาสไคลเอนต์ต่อไปนี้สำหรับ Ibatis 2.x:
คลาส DAO ที่สอดคล้องกับกรอบฤดูใบไม้ผลิ
ใช้เฉพาะ DAO ของ Ibatis SQL Mapping API DAO นี้สามารถสร้างได้ในสองวิธีต่อไปนี้: ให้ SQLMAPClient ผ่านวิธีการก่อสร้างหรือการฉีดเครื่องตั้งค่า
DAO สอดคล้องกับเฟรมเวิร์ก Ibatis Dao (ส่วนเสริมของ Ibatis ซึ่งล้าสมัยเราขอแนะนำให้คุณใช้ Framework Spring แทน)
เครื่องกำเนิด MyBatis สามารถทำงานได้ดีในสภาพแวดล้อมการพัฒนาซ้ำและทำหน้าที่เป็นงานมดหรือปลั๊กอิน Maven ในสภาพแวดล้อมการสร้างอย่างต่อเนื่อง สิ่งสำคัญต่อไปนี้ที่ต้องจดจำเมื่อเรียกใช้ MBG:
MBG จะรวม XML โดยอัตโนมัติซึ่งมีอยู่แล้วและซ้ำกับไฟล์ที่สร้างขึ้นใหม่ MBG ไม่ได้เขียนทับการดัดแปลงที่คุณทำกับ XML ที่คุณสร้างขึ้น คุณสามารถเรียกใช้ซ้ำแล้วซ้ำอีกโดยไม่ต้องกังวลเกี่ยวกับการสูญเสียการเปลี่ยนแปลงที่กำหนดเอง MBG จะแทนที่องค์ประกอบ XML ทั้งหมดที่สร้างขึ้นในการรันก่อนหน้า
MBG ไม่รวมไฟล์ Java สามารถเขียนทับไฟล์ที่มีอยู่หรือบันทึกไฟล์ที่สร้างขึ้นใหม่ในชื่อที่ไม่ซ้ำกันอื่น คุณสามารถรวมการเปลี่ยนแปลงเหล่านี้ด้วยตนเอง เมื่อคุณใช้ปลั๊กอิน Eclipse MBG สามารถรวมไฟล์ Java โดยอัตโนมัติ
การใช้งานขั้นพื้นฐาน
MBG ส่วนใหญ่อาศัยไฟล์การกำหนดค่า XML ก่อนอื่นเราสามารถสร้างโครงการใหม่ที่ชื่อว่า MyBatisGenerator สร้างแพ็คเกจใหม่สามชุดชื่อ COFFRE, David.Test และ David.mbg แพ็คเกจการกำหนดค่าส่วนใหญ่จะจัดเก็บไฟล์การกำหนดค่าที่จำเป็นใน MyBatis จริง คุณสามารถคัดลอก mybatis_demo_config.xml ในโครงการในบทก่อนหน้าและใส่ไว้ในไดเรกทอรีนี้ ฯลฯ สำหรับโปรแกรมทดสอบ ตามชื่อหมายถึง David.test คือการจัดเก็บวิธีการที่ใช้กันทั่วไปและโปรแกรมทดสอบ นอกจากนี้คุณยังสามารถใช้คลาสเครื่องมือ MyBatisutils ในบทก่อนหน้าและสร้าง mainfunction ที่สอดคล้องกันเพื่อวัตถุประสงค์ในการทดสอบ และ David.mbg สุดท้ายคือ XML ที่เราจะกำหนดค่าวันนี้และ MBG สร้างไฟล์การกำหนดค่า
ดังที่แสดงในรูปเราได้สร้างไฟล์กำหนดค่าใหม่ที่เรียกว่า mbg_configuration.xml ด้านล่าง รายละเอียดมีดังนี้:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! DOCTYPE GENERATORATONCONTURAUNT POVER "-// MyBatis.org//dtd MyBatis Generation 1.0 // en" "http://mybatis.org/dtd/MyBatis <classpathentry location = "./ lib /mysql-connector-java-5.1.26-bin.jar" /> <context id = "mybatisdemoformysql" targetRuntime = "myBatis3"> <! ไม่ว่าจะเป็นการลบ timestamps ของไฟล์ที่สร้างขึ้นโดยอัตโนมัติทั้งหมดหรือไม่ค่าเริ่มต้นเป็นเท็จ-> <property name = "suppressDate" value = "true" /> < /commentGenerator> <!-ฐานข้อมูลควบคุม-> <jdbcconnection driverclass = "com.mysql.jdbc.driver" ConnectionUrl = "jdbc: mysql: //127.0.0.1: 3306/mybatis_db? characterencoding = utf8" userid = "รูท" รหัสผ่าน = "david0110"/> <javatyperesolver> <! </javatyperesolver> <!-โมเดลที่สอดคล้องกับตารางฐานข้อมูล-> <JavamodelGenerator TargetPackage = "David.Model" TargetProject = "SRC"> <property name = "ENABSEBPACKAGES" ค่า = "true" /> <property name = "Trimstrings" ไฟล์-> <sqlmapgenerator targetPackage = "david.mappers" targetProject = "src"> <property name = "ENABLESUBPACKAGES" value = "true" /> < /sqlmapGenerator> <! NAME = "ENABLESUBPACKAGES" value = "true" /> <property name = "MethodNameCalculator" value = "Extended" /> < /javaclientGenerator> <!-schema สำหรับฐานข้อมูลของคุณชื่อ tablename บ่งชี้ว่า domainobjectName นั้นสอดคล้องกับชื่อคลาส javabean domainObjectName = "ผู้เยี่ยมชม" enableCountByExample = "false" enableUpDateByExample = "false" enableTeleteByExample = "false" eNableSeLectByExample = "false" selectByExampleQueryId = "false"> <ไม่รู้คอลัมน์คอลัมน์ = "สถานะ" delimitedColumnName = "false"/> </blem> </stutement> </eneratorConfiguration>
คุณสามารถสังเกตได้ว่าส่วนใหญ่เป็นโหนดเหล่านี้
<scrasspathentry> => ตำแหน่งที่จัดเก็บแพ็คเกจไดรเวอร์ JDBC สามารถใช้เพื่อใช้เส้นทางสัมพัทธ์หรือเส้นทางสัมบูรณ์ ในตัวอย่างนี้ใช้เส้นทางสัมพัทธ์
<dexting> => ปฏิบัติตามการกำหนดค่าของตารางทั้งหมดในฐานข้อมูลอาจมีหลายบริบทการกำหนดค่าหนึ่ง MySQL และ One Oracle การกำหนดค่า
สิ่งที่สำคัญภายใต้โหนด <บริบท> คือ:
<commentGenerator> => โหนดเครื่องกำเนิดความคิดเห็น, 2 ตารางย่อยในตัวอย่างนี้แสดงถึง
SuppressAllcomments => ว่าจะลบไฟล์ความคิดเห็นที่สร้างขึ้นโดยอัตโนมัติทั้งหมดหรือไม่
suppressDate => ว่าจะลบการประทับเวลาของไฟล์ที่สร้างขึ้นโดยอัตโนมัติทั้งหมดหรือไม่
<jdbcconnection> => ข้อมูลการกำหนดค่าการเชื่อมต่อฐานข้อมูล
<javatyperesolver> => แปลงประเภททศนิยมและจำนวนใน jdbc เป็น java.math.bigdeciaml การเป็นตัวแทน
<javamodelGenerator> => กำหนดค่าคลาส POJO Entity ของคุณ TargetPackage = "David.model" ซึ่งสอดคล้องกับการลงทะเบียนของคุณคุณสามารถตั้งชื่อตามธุรกิจจริงเป้าหมาย Project = "SRC" ในสภาพแวดล้อม Eclipse เส้นทางไปยังโครงการและโฟลเดอร์แหล่งที่มาโดยทั่วไปเรียกว่าไดเรกทอรี SRC แพ็คเกจของคุณจะถูกสร้างขึ้นใหม่ในไดเรกทอรีนี้ หากไม่ใช่สภาพแวดล้อม eclipse ค่าที่นี่ควรเป็นเส้นทางระบบไฟล์จริง หากไม่มีเส้นทางที่ระบุจะมีการรายงานข้อผิดพลาดเนื่องจาก MBG จะไม่สร้างโฟลเดอร์ที่เกี่ยวข้องด้วยตัวเอง
<SqlMapGenerator> => กำหนดค่าเพื่อสร้างเอนทิตี mapper.xml ที่สอดคล้องกัน สำหรับ mapper3.x เราต้องพิมพ์ = "xmlmapper"
<javaclientGenerator> => กำหนดค่าสร้างคลาสอินเตอร์เฟสที่สอดคล้อง
<bable> => กำหนดค่าฐานข้อมูลที่เกี่ยวข้องซึ่งระบุว่าชื่อคลาสโดเมน (นั่นคือชื่อคลาสเอนทิตี) ต้องการสร้าง ในตัวอย่างนี้ฉันปิดข้อมูลการสร้างตัวอย่างที่ไม่จำเป็นทั้งหมดทั้งหมด
ข้อมูลข้างต้นทั้งหมดสามารถตรวจสอบได้บนเว็บไซต์อย่างเป็นทางการสำหรับเอกสารที่เกี่ยวข้องหรือดาวน์โหลดในไฟล์ของฉันด้วยคำแนะนำการกำหนดค่าที่เกี่ยวข้องและตัวอย่างแอปพลิเคชันที่เกี่ยวข้อง ดาวน์โหลดเอกสาร
หลังจากกำหนดค่าข้อมูลข้างต้นขั้นตอนสุดท้ายคืออะไร? เราจะเรียกใช้ไฟล์สคริปต์นี้ คำอธิบายอย่างเป็นทางการมี 4 วิธี อย่างแรกคือผ่านวิธีการบรรทัดคำสั่งที่สองและสามถูกสร้างขึ้นผ่านเครื่องมือเช่น Ant หรือ Maven อันสุดท้ายถูกสร้างขึ้นผ่านรหัส Java เราใช้วิธีการสร้างผ่าน Java Barley วิธีการเพิ่มสคริปต์ที่สร้างขึ้นในคลาส Demorun มีดังนี้:
โมฆะคงที่ส่วนตัว GeneratembgConfiguration () { /** mybatis มาพร้อมกับเครื่องมือสร้างเครื่องกำเนิดเพื่อสร้างสิ่งที่สอดคล้องกัน* / list <string> คำเตือน = ใหม่ ArrayList <String> (); บูลีน overwrite = true; ไฟล์ configfile = ไฟล์ใหม่ ("./ src/david/mbg/mbg_configuration.xml"); configurationParser cp = new configurationParser (คำเตือน); การกำหนดค่าการกำหนดค่า = null; ลอง {config = cp.parseconfiguration (configfile); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (xmlparserexception e) {// todo บล็อก catch ที่สร้างอัตโนมัติ e.printstacktrace (); } defaultShellCallback callback = ใหม่ defaultShellCallback (overWrite); ลอง {MyBatisGenerator MyBatisGenerator = ใหม่ myBatisGenerator (config, callback, คำเตือน); MyBatisGenerator.generate (NULL); } catch (InvalIdConfigurationException E) {// TODO บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } system.out.println ("การกำหนดค่า mybatis ถูกสร้างขึ้นสำเร็จ!"); - หลังจากทำงานแล้วให้รีเฟรชโครงการคุณจะพบว่าสิ่งต่อไปนี้สร้างการกำหนดค่าหลักอย่างน่าอัศจรรย์สำหรับคุณ ส่วนกล่องสีแดงของรูปด้านล่าง:
สุดท้ายให้ใช้ผลลัพธ์ที่สร้างขึ้นโดยอัตโนมัติ เราสามารถอ้างถึงบทหกบทแรกเพื่อเพิ่มวิธีการทดสอบ CRUD ที่สอดคล้องกันใน Demorun ดังนี้:
/** ข้อมูลผู้เยี่ยมชมแบบสอบถาม*/ โมฆะสาธารณะแบบคงที่ testGenerateAddd () {sqlsession session = myBatisutils.getSqlSession (); Visitormapper Voperation = session.getMapper (Visitormapper.class); ผู้เข้าชม = ผู้เข้าชมใหม่ (); Visitor.SetVisitor_Name ("Hello2"); Visitor.setEmail ("[email protected]"); ผู้เยี่ยมชม SetCreateTime (วันที่ใหม่ ()); int count = voperation.insert (ผู้เยี่ยมชม); session.commit (); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.add, นับ); } /** ข้อมูลผู้เยี่ยมชมแบบสอบถาม* / โมฆะสาธารณะคงที่ testGenerateQuery (ID int) {SQLSession Session = MyBatisutils.getSqlSession (); Visitormapper Voperation = session.getMapper (Visitormapper.class); ผู้เข้าชม = voperation.selectbyprimarykey (id); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.query, 1); System.out.println (ผู้เยี่ยมชม); } โมฆะคงที่สาธารณะ testGenerateDelete (int id) {sqlsession session = mybatisutils.getsqlsession (); Visitormapper Voperation = session.getMapper (Visitormapper.class); int count = voperation.deleteByPrimaryKey (id); session.commit (); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.delete, นับ); } โมฆะคงที่สาธารณะ testGenerateUpdate (ID int) {SQLSession Session = MyBatisutils.getSqlSession (); Visitormapper Voperation = session.getMapper (Visitormapper.class); ผู้เข้าชม = voperation.selectbyprimarykey (id); System.out.println (ผู้เยี่ยมชม); ชื่อสตริง = visitor.getVisitor_name (); if (name.contains ("update")) {visitor.setVisitor_name (name.substring (0, name.indexof ("Update")))); } else {visitor.setVisitor_name (ชื่อ + "อัปเดต"); } int count = voperation.updateByPrimaryKey (ผู้เยี่ยมชม); session.commit (); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.update, นับ); System.out.println (ผู้เยี่ยมชม); - เรียกใช้โปรแกรมทดสอบและผลลัพธ์คือ
คุณรู้สึกว่าการใช้สิ่งนี้ช่วยให้คุณปรับปรุงประสิทธิภาพได้มากและคุณไม่ต้องกังวลเกี่ยวกับการกำหนดค่าที่ยุ่งยาก อย่างน้อยคุณก็ไม่จำเป็นต้องทำตามขั้นตอนซ้ำ ๆ และไม่จำเป็น ปล่อยให้สิ่งเหล่านี้ถูกทิ้งไว้ในเครื่องมือที่จะทำ^0^ แน่นอนในการใช้งานจริงเราอาจต้องแก้ไขข้อมูลคลาสที่เกี่ยวข้องและชื่อข้อมูลอินเตอร์เฟสหลังจากการสร้าง แน่นอนปริมาณงานเหล่านี้ไม่มากเกินไป ฉันหวังว่าเนื้อหาเหล่านี้จะเป็นประโยชน์กับนักเรียนที่ต้องการกำหนดค่าในวันนี้