Из -за различных бизнес -потребностей в проекте иногда нам нужно динамически управлять таблицами данных (например, динамическое здание таблицы, поля операционной таблицы и т. Д.). Как правило, мы будем хранить журналы, информацию о местонахождении в реальном времени и т. Д. В таблице данных и генерируем таблицу для хранения в определенный период времени, log_201806, log_201807 и т. Д. Здесь мы используем Mybatis для его реализации, и будет использоваться динамический SQL.
Dynamic SQL - одна из мощных особенностей Mybatis. Перед предварительным компилированием операторов SQL Mybatis динамически проанализирует SQL и разрабатывает его в объект BoundSQL, который также используется для обработки динамического SQL здесь.
В динамическом анализе SQL эффекты #{} и $ {} различны:
#{} проанализирован в маркер параметра для предварительного оператора JDBC.
Например, следующее заявление SQL:
выберите * из пользователя, где name = #{name}; Будет проанализировано как:
Выберите * из пользователя, где имя =?
Вы видите #{} быть проанализированным в заполнителю параметра? Полем
$ {} - это просто замена чистой строки, замена переменной будет выполняться на стадии динамического анализа SQL.
Например, следующее заявление SQL:
выберите * из пользователя, где имя = $ {name}; Когда мы передаем параметр «Джоанна», SQL будет анализироваться как:
выберите * из пользователя, где имя = "Джоанна";
Вы можете видеть, что оператор SQL перед предварительным обязательством больше не содержит имя переменной.
Подводя итог, что этап замены переменной $ {} находится на стадии динамического анализа SQL, в то время как замена переменной #{} находится в СУБД.
Следующее реализует динамическое создание таблицы Mybatis, определяет, существует ли таблица и удаляет функцию таблицы.
Mapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper.org/dtd/mybatis-3-mapper.dtd " namespace = "xx.xxx.xx.mapper.operatetablemapper"> <select id = "существует" parametertype = "string" recouttype = "integer"> select count (*) из information_schema.tables, где lcase (table_name) =#{tableName} </select> <update id id ydame vicistable $ vicistable $ ablen " </update> <обновление идентификатор = "createnewtable" parametertype = "string"> create table $ {tableName} (id bigint (20) не null auto_increment, EntityId bigint (20) не null, dx double not null, dy Double, dz Double Not null, ntlip var (32) не нулевой, gnsstim Направление по умолчанию NULL, атрибуты varchar (255) нуль по умолчанию, первичный ключ (id)) </update> <insert id = "insert" parametertype = "xx.xxx.xx.po.trackpoint"> вставьте в $ {tableName} (intityId, dx, dy, dz, ntype, gnsstime, speed, atityid) ( #{trackpoint.entityId}, #{trackpoint.dx}, #{trackpoint.dy}, #{trackpoint.dz}, #{trackpoint.ntype}, #{trackpoint.gnsstime}, #{trackpoint.speed}, #{chrackpoint.direction}, #{trackpoint.speed}, #{trackpoint.direction}, #{ @ { @ {asmpoint.trib} {{ @ {asmpoint.trib}, { trackpoint.strect. </insert> </mapper>Mapper.java
Пакет xx.xxx.xx.mapper;
Import org.apache.ibatis.annotations.param; Import xx.xxx.xx.po.trackpoint; Public Interface OperateTableMapper {int существует (String TableName); int droptable (@param ("TableName") String TableName); int createNewTable (@param ("tableName") String TableName); int insert (@param ("TableName") String TableName,@param ("Trackpoint") TrackPoint TrackPoint);}Суммировать
Выше приведено пример кода таблицы динамического создания Mybatis, введенный вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!