Debido a las diferentes necesidades comerciales en el proyecto, a veces necesitamos operar dinámicamente tablas de datos (como la construcción dinámica de la tabla, los campos de la tabla de operaciones, etc.). Comúnmente, almacenaremos registros, información de ubicación en tiempo real del dispositivo, etc. en la tabla de datos, y generaremos una tabla para el almacenamiento en un cierto período de tiempo, log_201806, log_201807, etc. Aquí usamos mybatis para implementarlo, y se utilizará SQL dinámico.
Dynamic SQL es una de las potentes características de MyBatis. Antes de precompilar declaraciones SQL, MyBatis analizará dinámicamente SQL y lo analizará en un objeto BoundSQL, que también se usa para procesar SQL dinámico aquí.
En el análisis dinámico de SQL, los efectos de #{} y $ {} son diferentes:
#{} analizado en un marcador de parámetros para una declaración precompilada JDBC.
Como la siguiente declaración SQL:
Seleccione * del usuario donde nombre = #{name}; Se analizará como:
Seleccione * del usuario donde nombre =?;
¿Puede ver que #{} se analiza en un marcador de posición de parámetro? .
$ {} es solo un reemplazo de cadena pura, se realizará un reemplazo variable durante la etapa dinámica de análisis SQL.
Como la siguiente declaración SQL:
Seleccione * del usuario donde nombre = $ {name}; Cuando pasamos el parámetro "Joanna", SQL analizará como:
seleccionar * del usuario donde nombre = "Joanna";
Puede ver que la instrucción SQL antes de la precompilación ya no contiene nombre de variable.
En resumen, la etapa de reemplazo de la variable de $ {} está en la etapa dinámica de análisis SQL, mientras que el reemplazo de la variable de #{} está en el DBMS.
La siguiente implementa la creación dinámica de la tabla mybatis determina si la tabla existe y elimina la función de la tabla.
Mapper.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "xx.xxx.xx.mapper.operatetableMapper"> <select id = "existable" parametertype = "string" resultType = "Integer"> select Count (*) de Information_Schema.tables donde lcase (table_name) =#{Tablename} </select> <uply id = "Droptable"> Drop stave exists </update> <update id = "createenewtable" parametertype = "string"> crea tabla $ {tableName} (id bigInt (20) no null auto_incement, entityid bigInt (20) no null, dx doble no nulo, dy doble no null, dz doble no, no nulle, ntype varchar (32) no null, gnsstste stent (20) no null, 20) no null, no null, no nulle, no nulle, no nulle, no null, no nulo, no nulo, no null, no nulo, no nulo, no sea, no nulo, no null, no sean predeterminados. Nulo, dirección float predeterminada nulo, atributos varchar (255) predeterminado nulo, clave primaria (id)) </update> <insertar id = "insertar" parametertype = "xx.xxx.xx.po.trackpoint"> insertar en $ {Tablename} (entityid, dx, dy, dz, ntype, gnsstime, velocidad, dirección, atributos) valores) valores) ( #{TrackPoint.entityId}, #{TrackPoint.dx}, #{TrackPoint.dy}, #{TrackPoint.dz}, #{TrackPoint.ntype}, #{TrackPoint.gnsSstime}, #{TrackPoint.speed}, #{TrackPoint.Direction}, #{{}Point.attributes})Mapper.java
paquete xx.xxx.xx.mapper;
importar org.apache.ibatis.annotations.param; import xx.xxx.xx.po.trackpoint; pública interfaz operatetableMapper {int ExistTable (String TableName); int droptable (@param ("tableName") string tableName); int createenewtable (@param ("tableName") cadena tableName); int Insert (@Param ("TableName") String TableName,@Param ("TrackPoint") TrackPoint);}Resumir
Lo anterior es el código de ejemplo de la tabla de creación dinámica de MyBatis presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!