เนื่องจากความต้องการทางธุรกิจที่แตกต่างกันในโครงการบางครั้งเราจำเป็นต้องใช้ตารางข้อมูลแบบไดนามิก (เช่นการสร้างตารางแบบไดนามิกฟิลด์ตารางการทำงาน ฯลฯ ) โดยทั่วไปเราจะจัดเก็บบันทึกข้อมูลตำแหน่งของอุปกรณ์ตามเวลาจริง ฯลฯ ลงในตารางข้อมูลและสร้างตารางสำหรับการจัดเก็บในช่วงเวลาหนึ่ง log_201806, log_201807 ฯลฯ ที่นี่เราใช้ mybatis เพื่อนำไปใช้และ SQL แบบไดนามิกจะถูกใช้
Dynamic SQL เป็นหนึ่งในคุณสมบัติที่ทรงพลังของ mybatis ก่อนที่คำสั่ง SQL ที่นำหน้า MyBatis จะแยกวิเคราะห์ SQL แบบไดนามิกและแยกวิเคราะห์ลงในวัตถุ BoundSQL ซึ่งใช้ในการประมวลผล SQL แบบไดนามิกที่นี่
ในการแยกวิเคราะห์ SQL แบบไดนามิกเอฟเฟกต์ของ #{} และ $ {} แตกต่างกัน:
#{} แยกวิเคราะห์ลงในเครื่องหมายพารามิเตอร์สำหรับคำสั่ง jdbc preompiled
เช่นคำสั่ง SQL ต่อไปนี้:
เลือก * จากผู้ใช้ที่ Name = #{ชื่อ}; จะถูกแยกวิเคราะห์เป็น:
เลือก * จากผู้ใช้ที่ชื่อ =?;
คุณเห็น #{} ถูกแยกวิเคราะห์เป็นตัวยึดพารามิเตอร์หรือไม่? -
$ {} เป็นเพียงการเปลี่ยนสตริงบริสุทธิ์การเปลี่ยนตัวแปรจะดำเนินการในระหว่างขั้นตอนการแยกวิเคราะห์ SQL แบบไดนามิก
เช่นคำสั่ง SQL ต่อไปนี้:
เลือก * จากผู้ใช้ที่ชื่อ = $ {ชื่อ}; เมื่อเราผ่านพารามิเตอร์ "Joanna" SQL จะแยกวิเคราะห์เป็น:
เลือก * จากผู้ใช้ที่ name = "Joanna";
คุณจะเห็นได้ว่าคำสั่ง SQL ก่อนที่ precompilation จะไม่มีชื่อตัวแปรอีกต่อไป
ในการสรุปขั้นตอนการแทนที่ของตัวแปรของ $ {} อยู่ในขั้นตอนการแยกวิเคราะห์ SQL แบบไดนามิกในขณะที่การเปลี่ยนตัวแปรของ #{} อยู่ใน DBMS
ต่อไปนี้ใช้การสร้างแบบไดนามิกของตาราง mybatis กำหนดว่าตารางมีอยู่หรือไม่และลบฟังก์ชันตาราง
mapper.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace = "xx.xxx.xx.mapper.operatetableMapper"> <select id = "มีอยู่" parameterType = "String" resultType = "Integer"> SELECT (*) จาก Information_SCHEMA.Table ที่ lcase (table_name) =# $ {tablename} </update> <update id = "createNewTable" parameterType = "string"> สร้างตาราง $ {tablename} (id bigint (20) ไม่ใช่ null auto_increment, entityid bigint (20) null null, dx null null null null NULL, ความเร็วลอยเริ่มต้น NULL, DIRECTION FLOAT ค่าเริ่มต้น NULL, แอตทริบิวต์ VARCHAR (255) ค่าเริ่มต้น NULL, คีย์หลัก (ID)) </UPDATE> <แทรก ID = "แทรก" พารามิเตอร์ "parameterType =" xx.xxx.xx.po.trackpoint " ค่า ( #{trackpoint.entityid}, #{trackpoint.dx}, #{trackpoint.dy}, #{trackpoint.dz}, #{trackpoint.ntype}, #{trackpoint.gnsstime}, #{trackpoint.speed}, #{trackpoint.direction </insert> </apper>mapper.java
แพ็คเกจ xx.xxx.xx.mapper;
นำเข้า org.apache.ibatis.annotations.param; นำเข้า xx.xxx.xx.po.trackpoint; อินเตอร์เฟสสาธารณะ OperateTableMapper {int arialTable (String tablename); int droptable (@param ("tablename") ชื่อแท็บเลน); int createNewTable (@param ("tablename") ชื่อแท็บเลน); int แทรก (@param ("tablename") string tablename,@param ("trackpoint") trackpoint trackpoint);}สรุป
ด้านบนเป็นรหัสตัวอย่างของตารางการสร้างแบบไดนามิก MyBatis ที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!