เมื่อใช้ myBatis เป็นเลเยอร์การคงอยู่คำสั่งแทรกเริ่มต้นเพื่อไม่ให้ส่งคืนค่าคีย์หลักของบันทึก แต่ส่งคืนจำนวนระเบียนที่แทรก หากเลเยอร์ธุรกิจจำเป็นต้องได้รับคีย์หลักของบันทึกฟังก์ชั่นนี้สามารถทำได้ผ่านการกำหนดค่า
สำหรับคีย์หลักลำดับก่อนที่จะดำเนินการแทรก SQL ต้องระบุค่าคีย์หลักสำหรับการแทรกบันทึกเช่น Oracle และ DB2 สามารถใช้วิธีการกำหนดค่าต่อไปนี้:
<insert id = "เพิ่ม" parameterType = "vo.category"> <selectKey resultType = "java.lang.short" order = "ก่อน" keyProperty = "id"> เลือก seq_test.nextval จากคู่ </selectKey> แทรกลงในหมวดหมู่ (#{namezh, jdbctype = varchar},#{parentid, jdbctype = smallint},#{showorder, jdbctype = smallint},#{deletestatus, jdbctype = bit},#{คำอธิบายสำหรับตารางที่มีคีย์หลักที่มีการผสมพันธุ์ไม่จำเป็นต้องใช้คีย์หลักเมื่อแทรก แต่คีย์หลักที่เพิ่มขึ้นด้วยตนเองจะได้รับโดยอัตโนมัติในระหว่างกระบวนการแทรก ตัวอย่างเช่น MySQL วิธีการกำหนดค่าสองวิธีต่อไปนี้สามารถนำมาใช้:
<insert id = "เพิ่ม" parameterType = "vo.category" useGeneratedKeys = "true" keyProperty = "id"> แทรกลงในหมวดหมู่ (name_zh, parent_id, show_order, delete_status, คำอธิบาย) ค่า (#{namezh, jdbctype = varchar},#{parentid, jdbctype = smallint},#{showorder, jdbctype = smallint},#{deletestatus, jdbctype = bit},#{คำอธิบายหรือ
<insert id = "เพิ่ม" parameterType = "vo.category"> <selectKey resultType = "java.lang.short" order = "หลังจาก" keyProperty = "id"> เลือก last_insert_id () เป็น id </selectey> แทรกลงในหมวดหมู่ (#{namezh, jdbctype = varchar},#{parentid, jdbctype = smallint},#{showorder, jdbctype = smallint},#{deletestatus, jdbctype = bit},#{คำอธิบายหลังจากการดำเนินการแทรกเสร็จสิ้นแล้วแอตทริบิวต์ ID ของหมวดหมู่พารามิเตอร์ได้รับการกำหนด
หากคีย์หลักของตารางฐานข้อมูลไม่ใช่ประเภทการเพิ่มขึ้นของตัวเองเลเยอร์แอปพลิเคชันจะต้องสร้างคีย์หลัก ..... ฉันจะไม่พูดอะไรมากเกี่ยวกับเรื่องนี้ เพื่อนที่ต้องการมันสามารถฝากข้อความเพื่อสื่อสาร ..
ต่อไปนี้เป็นวิธีการเขียนสำหรับ Oracle Oracle ไม่มี autoincrement แต่ Currval นำไปใช้กับทริกเกอร์ถูกกำหนดไว้ในทริกเกอร์
<insert id = "แทรก" parameterClass = "profeekindObject"> <! [cdata [แทรกลงใน t_pro_feekind (kindid, kindname, kindtype, เปิดใช้งาน) ค่า (seq_t_pro_feekind_id.nextval,#kindname#,#kindtype#,#,#,#,#,#,#,#, keyProperty = "kindid"> เลือก seq_t_pro_feekind_id.currval เป็น kindid จาก dual </selectkey> </insert> <!-ต่อไปนี้เป็นวิธีการเขียนสำหรับ mysql-> <!
รหัสอ้างอิงอื่น ๆ :
เมื่อคงที่วัตถุเอนทิตี (เช่นการบันทึกวัตถุ) หากเราไม่ใช้ SelectKey เราจะไม่ได้รับแอตทริบิวต์ ID ของวัตถุเอนทิตีทันทีนั่นคือคีย์หลักของตารางข้อมูล
รหัส Java
การอนุญาตอนุญาต = การอนุญาตใหม่ (); Permission.set ... Permisondao.CreatePermission (การอนุญาต); assertNull (อนุญาต); การอนุญาตอนุญาต = การอนุญาตใหม่ (); Permission.set ... Permisondao.CreatePermission (การอนุญาต); assertNull (อนุญาต);
องค์ประกอบ SelectKey เกี่ยวข้องกับตำแหน่งในองค์ประกอบหลัก
<insert id = "addperMission" parameterClass = "การอนุญาต"> <selectKey resultSclass = "int" keyProperty = "permissionId"> เลือก seq_p_permission.nextval จาก dual </selectey> แทรกลงใน p_permission #permissionName #, #permissionenName #, #url #) </insert> <แทรก id = "addperMission" parameterClass = "การอนุญาต"> <selectKey resultSclass = "int" keyProperty = "PermissionId"> SELECT SEQ_P_PERMISTION.NEXTVAL URL) ค่า (#permissionId#,#permissionInfo#,#permissionName#,#permissionenName#,#url#) </insert>
MySQL และ SQLServer อยู่เบื้องหลัง
รหัส XML
<insert id = "addperMission" parameterClass = "การอนุญาต"> แทรกลงใน p_permission (อนุญาตให้ใช้สิทธิ์, สิทธิ์ในการอนุญาต, PermissionName, PermissionenName, URL) ค่า ( #permissionId #, #permissionInfo #, #permissionName #, #permissionenname last_insert_id () </selectkey> </insert> <แทรก id = "addperMission" parameterClass = "การอนุญาต"> แทรกลงใน p_permission (อนุญาตให้ใช้สิทธิ์, สิทธิ์ในการอนุญาต, ชื่อสิทธิ์, ชื่อ URL)# keyProperty = "permissionId"> เลือก last_insert_id () </selectkey> </insert>
เขียนเหมือนข้างต้นมันเกี่ยวข้องอย่างใกล้ชิดกับที่ตั้งของ SelectKey องค์ประกอบ SelectKey ของไฟล์การกำหนดค่า SQLMAP ของ Ibatis มีแอตทริบิวต์ประเภทซึ่งสามารถระบุได้ว่าก่อนหรือโพสต์แสดงถึงการสร้างก่อนหรือหลังการสร้าง
สำหรับ Oracle มันคือ
รหัส XML
<insert id = "addperMealme" parameterClass = "การอนุญาต"> <selectKey resultSclass = "int" keyProperty = "PermissionId" type = "pre"> เลือก seq_p_permission.nextval จาก dual </selectey> แทรกลงใน p_permission #permissionName #, #permissionenName #, #url #) </insert> <แทรก id = "addperMission" parameterClass = "การอนุญาต"> <selectKey resultSclass = "int" keyProperty = "permissionId" PermissionEnname, URL) ค่า (#permissionId#,#permissionInfo#,#permissionName#,#permissionenName#,#url#) </แทรก>
mysql, sqlserver ฯลฯ แสดงเป็น:
รหัส XML
<insert id = "addPerMission" parameterClass = "การอนุญาต"> <selectKey resultSclass = "int" keyProperty = "PermissionId" type = "post"> เลือก last_insert_id () </selectkey> แทรกลงใน p_permission #permissionenName #, #url #) </insert>
ด้านบนเป็นวิธีการส่งคืนคีย์หลักใน mybatis ใน mybatis แนะนำให้คุณรู้จักโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!