En raison des différents besoins commerciaux dans le projet, nous devons parfois utiliser dynamiquement des tables de données (telles que la construction de tableaux dynamiques, les champs de table d'opération, etc.). Généralement, nous stockons les journaux, les informations de localisation en temps réel, etc. dans la table de données et générerons une table pour le stockage dans une certaine période, LOG_201806, LOG_201807, etc. Nous utilisons ici MyBatis pour l'implémenter, et Dynamic SQL sera utilisé.
Dynamic SQL est l'une des caractéristiques puissantes de Mybatis. Avant de précompir les instructions SQL, MyBatis analysera dynamiquement SQL et l'analysera dans un objet BoundsQL, qui est également utilisé pour traiter Dynamic SQL ici.
Dans l'analyse dynamique SQL, les effets de # {} et $ {} sont différents:
# {} a analysé un marqueur de paramètre pour une instruction précompilée JDBC.
Comme l'instruction SQL suivante:
sélectionnez * à partir de l'utilisateur où name = # {name}; Sera analysé comme:
Sélectionnez * à partir de l'utilisateur où name =?;
Pouvez-vous voir # {} être analysé dans un espace réservé de paramètre? .
$ {} est juste un remplacement de chaîne pur, le remplacement variable sera effectué pendant l'étape d'analyse SQL dynamique.
Comme l'instruction SQL suivante:
sélectionnez * à partir de l'utilisateur où name = $ {name}; Lorsque nous passons le paramètre "Joanna", SQL analysera:
Sélectionnez * à partir de l'utilisateur où name = "Joanna";
Vous pouvez voir que l'instruction SQL avant la précompilation ne contient plus de nom de variable.
Pour résumer, l'étape de remplacement de la variable de $ {} est dans l'étape d'analyse SQL dynamique, tandis que le remplacement de la variable de # {} est dans les SGBD.
Ce qui suit implémente la création dynamique de la table MyBatis, détermine si le tableau existe et supprime la fonction du tableau.
Mapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mappen 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "xx.xxx.xx.mapper.OperateTableMapper"> <select id = "exisable" ParameterType = "String" resultType = "Integer"> SELECT COUNT (*) FROM INFORMATION_SCHEMA.TABLES WHERE LCASE (TABLE_NAME) = # {TableName} </ Select> <Update ID = "DropTable"> <Update id = "creEnewTable" ParameterType = "String"> Créer un tableau $ {TableName} (id bigInt (20) pas null auto_increment, EntityId bigInt (20) pas null, dx double pas null, dy double pas nul Null, attributs varchar (255) par défaut null, clé primaire (id)) </dated> <insert id = "insert" ParameterType = "xx.xxx.xx.po.trackpoint"> Insert dans $ {TableName} (entityId, dx, dy, dz, ntype, gnsStime, Speed, Direction, Attributs) # {trackpoint.dx}, # {trackpoint.dy}, # {trackPoint.dz}, # {trackPoint.ntype}, # {trackpoint.gnsStime}, # {trackpoint.speed}, # {trackpoint.direction}, # {trackpoint.attrributes}) </serser> </pperMappeur.java
Package xx.xxx.xx.mapper;
import org.apache.ibatis.annotations.param; import xx.xxx.xx.po.trackpoint; Interface publique opéraTableMapper {int exisable (string TableName); int droptable (@param ("tableName") String TableName); int créenewTable (@param ("tablename") String TableName); int Int insert (@param ("tableName") String TableName, @ param ("trackPoint") trackpoint trackPoint);}Résumer
Ce qui précède est l'exemple de code de la table de création dynamique de MyBatis qui vous a été introduit par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!