คำสั่ง SQL ฐานข้อมูลการใช้งานที่ใช้กันทั่วไปของเราจะต้องรวบรวมก่อนแล้วจึงดำเนินการเมื่อดำเนินการ ขั้นตอนการจัดเก็บเป็นชุดของคำสั่ง SQL เพื่อทำฟังก์ชั่นเฉพาะให้เสร็จสมบูรณ์ หลังจากการรวบรวมมันจะถูกเก็บไว้ในฐานข้อมูล ผู้ใช้เรียกและดำเนินการโดยระบุชื่อของขั้นตอนที่เก็บไว้และให้พารามิเตอร์ (หากโพรซีเดอร์ที่เก็บไว้มีพารามิเตอร์)
ขั้นตอนที่เก็บไว้เป็นฟังก์ชันที่ตั้งโปรแกรมได้ซึ่งสร้างและบันทึกในฐานข้อมูล มันสามารถประกอบด้วยคำสั่ง SQL และโครงสร้างการควบคุมพิเศษบางอย่าง ขั้นตอนที่เก็บไว้มีประโยชน์มากเมื่อคุณต้องการเรียกใช้ฟังก์ชั่นเดียวกันในแอปพลิเคชันหรือแพลตฟอร์มที่แตกต่างกันหรือห่อหุ้มฟังก์ชั่นเฉพาะ ขั้นตอนที่เก็บไว้ในฐานข้อมูลถือได้ว่าเป็นแบบจำลองของวิธีการเชิงวัตถุในการเขียนโปรแกรม ช่วยให้สามารถควบคุมวิธีการเข้าถึงข้อมูล
1. ขั้นตอนที่เก็บไว้ช่วยเพิ่มฟังก์ชั่นและความยืดหยุ่นของภาษา SQL ขั้นตอนที่เก็บไว้สามารถเขียนได้ในงบควบคุมการไหลซึ่งมีความยืดหยุ่นที่แข็งแกร่งและสามารถตัดสินที่ซับซ้อนและการดำเนินงานที่ซับซ้อนมากขึ้น
2. ขั้นตอนที่เก็บไว้ช่วยให้ส่วนประกอบมาตรฐานได้รับการตั้งโปรแกรม หลังจากสร้างขั้นตอนที่เก็บไว้แล้วมันสามารถเรียกได้หลายครั้งในโปรแกรมโดยไม่ต้องเขียนคำสั่ง SQL ของขั้นตอนที่เก็บไว้ นอกจากนี้ผู้เชี่ยวชาญด้านฐานข้อมูลสามารถแก้ไขขั้นตอนที่เก็บไว้ได้ตลอดเวลาโดยไม่มีผลกระทบใด ๆ กับซอร์สโค้ดแอปพลิเคชัน
3. ขั้นตอนที่เก็บไว้สามารถบรรลุความเร็วในการดำเนินการได้เร็วขึ้น หากการดำเนินการมีรหัสธุรกรรม SQL จำนวนมากหรือดำเนินการหลายครั้งตามลำดับขั้นตอนที่เก็บไว้จะเร็วกว่าการประมวลผลแบบแบทช์มาก เนื่องจากขั้นตอนที่เก็บไว้นั้นถูกคอมไพล์ไว้ล่วงหน้า เมื่อขั้นตอนการจัดเก็บจะถูกเรียกใช้ครั้งแรกเครื่องมือเพิ่มประสิทธิภาพจะวิเคราะห์และปรับให้เหมาะสมและให้แผนการดำเนินการที่เก็บไว้ในตารางระบบในที่สุด คำสั่งการประมวลผลแบทช์ Transaction-SQL จะต้องรวบรวมและปรับให้เหมาะสมทุกครั้งที่ทำงานซึ่งค่อนข้างช้า
4. ขั้นตอนที่เก็บไว้สามารถลดทราฟฟิกเครือข่ายได้โดย over-the-counter สำหรับการดำเนินงาน (เช่นการสืบค้นการปรับเปลี่ยน) ของวัตถุฐานข้อมูลเดียวกันหากคำสั่ง Transaction-SQL ที่เกี่ยวข้องในการดำเนินการนี้จะถูกจัดเก็บโดยกระบวนการขององค์กรจากนั้นเมื่อขั้นตอนที่เก็บไว้จะเรียกใช้คอมพิวเตอร์ไคลเอนต์เฉพาะคำสั่งการโทรจะถูกส่งในเครือข่าย
5. ขั้นตอนที่เก็บไว้สามารถใช้อย่างเต็มที่เป็นกลไกความปลอดภัย ผู้ดูแลระบบสามารถ จำกัด สิทธิ์ในการเข้าถึงข้อมูลที่เกี่ยวข้องโดยดำเนินการอนุญาตให้ใช้กับขั้นตอนที่จัดเก็บบางอย่างหลีกเลี่ยงการเข้าถึงข้อมูลโดยผู้ใช้ที่ไม่ได้รับอนุญาตและสร้างความมั่นใจในความปลอดภัยของข้อมูล
1. ไม่ใช่เรื่องง่ายที่จะบำรุงรักษาเมื่อตรรกะเปลี่ยนแปลงมันเป็นปัญหาในการแก้ไขมัน
2. ถ้าคนที่เขียนขั้นตอนที่เก็บไว้นี้อาจเป็นหายนะสำหรับผู้ที่เข้ามาใช้รหัสของเธอเพราะคนอื่นยังต้องเข้าใจตรรกะของโปรแกรมและตรรกะการจัดเก็บของคุณ ไม่เอื้อต่อการขยายตัว
3. ข้อเสียที่ใหญ่ที่สุด! แม้ว่าขั้นตอนที่เก็บไว้สามารถลดจำนวนรหัสและปรับปรุงประสิทธิภาพการพัฒนา แต่สิ่งหนึ่งที่ร้ายแรงมากมันใช้เวลานานเกินไป
ต่อไปนี้เป็นรหัสที่จะแนะนำขั้นตอนการจัดเก็บ MySQL ใน mybatis;
## 1. มีนักเรียนตารางนักเรียน (รหัส, ชื่อ, อายุ, เงิน) ## 2 สร้างขั้นตอนที่เก็บไว้สำหรับการสืบค้นข้อมูลตารางนักเรียน: ตัวคั่น | สร้างโพรซีเดอร์ showallstu () เริ่มเลือก * จากคำสั่งซื้อของนักเรียนตาม ID DESC Limit 6; enddelimiter ## 2 สร้างขั้นตอนที่เก็บไว้สำหรับการลบระเบียน (ผ่านรหัสนักเรียน): `` `ตัวคั่น | สร้างขั้นตอน delbyId (d int (11)) เริ่มลบจากนักเรียนโดยที่ id = d; enddelimiter ## 3 สร้างโครงการใน maven: (ละเว้น) //pox.xml การกำหนดค่า: <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modersion> 4.0.0 <Cackaging> สงคราม </packaging> <Sersion> 1.0 </Sersion> <name> MyBatis-mysql Maven Webapp </name> <url> http://maven.apache.org </url> <scope> ทดสอบ </cope> </derctency> <predency> <sdeperency> <roupId> org.projectlombok </groupId> <ratifactid> Lombok </artifactid> <cersion> 1.16.20 </Scope> </Scope> <Sersion> 3.4.6 </Sident> </perdency> <การพึ่งพา> <roupId> MySQL </groupID> <ArtIfactId> MySQL-connector-Java </artifactId> <persion> 6.0.6 </Starctid> </การพึ่งพา <Sersion> 1.2.3 </Scope> <Scope> ทดสอบ </cope> </การพึ่งพาอาศัย> </การพึ่งพา> <uChUt> <mentName> $ {Project.artifactId} </nameName> <TestSourcedirectory> SRC/Test/Java </testsourcedirectory> ไม่สามารถโหลดไฟล์ได้-> <sroves> <sroves> <sresour> <Irectory> SRC/Main/Java </Directory> <cencal> <countal> **/*. XML </-dalject> <รวม> **/*. คุณสมบัติ </include> </cold> </resource> <resource> <conaled> **/*. คุณสมบัติ </include> </sorsors> </uffer> </project> ## 4 การกำหนดค่ารายการฐานข้อมูลลิงก์ (ละเว้น) การกำหนดค่า: myBatis-ConFig.xml: <? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <การกำหนดค่า> <!-นี่คือพอร์ทัลการกำหนดค่าสำหรับฐานข้อมูลทรัพยากร-> <properties resource = "db.properties"/> <! <typealias> <!-กำหนดค่านามแฝงคลาสรุ่น-> <!-<typealias type = "com.fz.entity.student" alias = "st"/>-> <!-กำหนดค่านามแฝงทั้งหมดภายใต้แพ็คเกจที่ระบุ // <environment default = "การพัฒนา"> <environment id = "การพัฒนา"> <transactionManager type = "jdbc"/> <dataSource type = "pooled"> <property name = "driver" value = "$ {db.driver}"/> <property name = "url" value = "$ {db.url}" name = "password" value = "$ {db.password}"/> </dataSource> </environment> </environments> <mappers> <!-<mapper/>-> <package name = "com.fz.mapper"/> </ypers> สร้างวัตถุระดับเอนทิตี: // แพ็คเกจ: com/fz/entity/นักเรียน @data นักเรียนชั้นเรียนสาธารณะ {ID int ส่วนตัว; ชื่อสตริงส่วนตัว; อายุ int ส่วนตัว; เงินคู่ส่วนตัว } ## 6 สร้างชั้นเรียนอินเตอร์เฟสของ StudentMapper และการกำหนดค่า StudentMapper.xml; // studentmapper อินเทอร์เฟซ studentmapper {// // การจัดเก็บขั้นตอนการสืบค้น 6 บันทึก; รายการสาธารณะ <student> Query (); // ขั้นตอนที่เก็บไว้จะลบบันทึก (โดย ID) สาธารณะ int delbyId (ID int); } //studentMapper.xml การกำหนดค่า `` `` <? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd/dtd/dtdtdtd-mybatis.org/dtdtd namespace = "com.fz.mapper.studentMapper"> <select id = "query" resultType = "นักเรียน"> {call showAllstu ()} </select> <ลบ id = "delbyid" parameterType = "int"> {call delbyid (#} คลาสทดสอบ: // TEST/JAVA/COM/DEMO01 แพ็คเกจ Com; นำเข้า com.fz.entity.student; นำเข้า com.fz.mapper.studentMapper; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.apache.ibatis.session.sqlsessionfactory; นำเข้า org.apache.ibatis.session.sqlsessionfactorybuilder; นำเข้า org.junit.After; นำเข้า org.junit. ก่อน; นำเข้า org.junit.test; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า java.util.list; การสาธิตระดับสาธารณะ 01 {ป้องกัน SQLSessionFactory SF; ป้องกัน SQLSession SS; @Test Public Void Test () {StudentMapper SDD = this.ss.getMapper (StudentMapper.class); รายการ <student> atd = sdd.Query (); สำหรับ (นักเรียน SD: ATD) {System.out.println (SD); } sdd.delbyid (18); } @Before Public Void Init () {InputStream คือ = null; ลอง {is = resources.getResourceasstream ("mybatis-config.xml"); this.sf = ใหม่ sqlsessionfactorybuilder (). build (IS); this.ss = this.sf.opensession (); } catch (ioexception e) {e.printstacktrace (); }} @after โมฆะสาธารณะปิด () {this.ss.commit (); this.ss.close (); -เติมเต็ม:
มาดูไวยากรณ์ของขั้นตอนที่เก็บไว้
1 สร้างขั้นตอนที่เก็บไว้
สร้างขั้นตอน sp_name () เริ่มต้น ......... จบ
2 การโทรขั้นตอนที่เก็บไว้
call sp_name()
หมายเหตุ: ชื่อขั้นตอนที่เก็บไว้จะต้องตามด้วยวงเล็บแม้ว่าขั้นตอนที่เก็บไว้จะไม่มีพารามิเตอร์ผ่าน
3 ลบขั้นตอนที่เก็บไว้
drop procedure sp_name//
หมายเหตุ: คุณไม่สามารถลบขั้นตอนอื่น ๆ ที่เก็บไว้ในขั้นตอนเดียวที่เก็บไว้ได้คุณสามารถโทรหาขั้นตอนอื่นที่เก็บไว้ได้เท่านั้น
4 คำสั่งทั่วไปอื่น ๆ
show procedure status
แสดงข้อมูลพื้นฐานของขั้นตอนที่เก็บไว้ทั้งหมดที่เก็บไว้ในฐานข้อมูลรวมถึงฐานข้อมูลที่เป็นของมันชื่อของขั้นตอนการจัดเก็บเวลาการสร้าง ฯลฯ
show create procedure sp_name
แสดงข้อมูลรายละเอียดของขั้นตอนการจัดเก็บ mysql
สรุป
ข้างต้นเป็นวิธีการใช้ขั้นตอนที่เก็บไว้ MySQL ใน mybatis แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!