Aufgrund der unterschiedlichen Geschäftsbedürfnisse im Projekt müssen wir manchmal Datentabellen dynamisch betreiben (z. B. dynamische Tabellenbildung, Betriebstabellenfelder usw.). In der Regel speichern wir Protokolle, Geräte-Echtzeit-Standortinformationen usw. in der Datentabelle und generieren eine Tabelle für den Speicher in einem bestimmten Zeitraum, log_201806, log_201807 usw. Wir verwenden MyBatis, um es zu implementieren, und dynamisches SQL wird verwendet.
Dynamic SQL ist eines der leistungsstarken Merkmale von MyBatis. Bevor MyBatis SQL -Anweisungen vor dem Vorkomparieren von SQL analysiert und in ein BoundSQL -Objekt analysiert, das auch zur Verarbeitung dynamischer SQL verwendet wird.
Bei der dynamischen SQL -Parsen sind die Auswirkungen von #{} und $ {} unterschiedlich:
#{} in einen Parametermarker für eine vorkompilierte JDBC -Anweisung analysiert.
Wie die folgende SQL -Anweisung:
Wählen Sie * vom Benutzer, wobei Name = #{Name}; Wird analysiert als:
Wählen Sie * vom Benutzer, wo name =?;
Kannst du sehen, wie #{} in einen Parameter -Platzhalter analysiert wird? .
$ {} ist nur ein reiner String -Ersatz, der variable Ersatz wird während der dynamischen SQL -Parsing -Stufe durchgeführt.
Wie die folgende SQL -Anweisung:
Wählen Sie * vom Benutzer, wobei Name = $ {Name}; Wenn wir den Parameter "Joanna" übergeben, wird SQL als:
Wählen Sie * vom Benutzer, wobei Name = "Joanna";
Sie können sehen, dass die SQL -Anweisung vor der Vorkompilierung keinen variablen Namen mehr enthält.
Zusammenfassend befindet sich die Ersatzstufe der Variablen von $ {} in der dynamischen SQL -Parsing -Stufe, während der Ersatz der Variablen von #{} in den DBMs liegt.
Die folgenden implementiert die dynamische Erstellung von MyBatis -Tabelle und bestimmt, ob die Tabelle vorhanden ist, und löscht die Tabellenfunktion.
Mapper.xml
<? namespace = "xx.xxx.xx.mapper.operatetablemapper"> <select id = "existtable" parameterType = "String" resultType = "Integer"> count (*) aus Information_Schema.tables Wob </update> <update id="createNewTable" parameterType="String"> CREATE TABLE ${tableName} ( id bigint(20) NOT NULL AUTO_INCREMENT, entityId bigint(20) NOT NULL, dx double NOT NULL, dy double NOT NULL, dz double NOT NULL, ntype varchar(32) NOT NULL, gnssTime bigint(20) NOT NULL, speed float DEFAULT NULL, DIREY Float Standard Null, zugeordnet varchar (255) Standardnull, Primärschlüssel (ID)) </updes updes id (#{trackpoint.entityid}, #{trackpoint.dx}, #{trackpoint.dy}, #{trackpoint.dz}, #{trackpoint.ntype}, #{trackpoint.gnsstime}, #{trackpoint.speed}, #{trackpoint.direction}, #{trackpoint.attributes}) </insert></mapper>Mapper.java
Paket xx.xxx.xx.mapper;
import org.apache.ibatis.annotations.param; import xx.xxx.xx.po.trackpoint; public interface operatetablemapper {int existtable (String tableName); int DropTable (@param ("tableName") String tableName); int createNewTable (@param ("tableName") String tableName); int insert (@param ("tableName") String tableName,@param ("Trackpoint") Trackpoint -Trackpoint);}Zusammenfassen
Das obige ist der Beispielcode der Dynamikerstellungstabelle von MyBatis, die Ihnen vom Herausgeber vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!