Devido às diferentes necessidades de negócios do projeto, às vezes precisamos operar dinamicamente tabelas de dados (como construção dinâmica de tabela, campos de tabela de operação etc.). Geralmente, armazenaremos logs, informações de localização em tempo real do dispositivo, etc. na tabela de dados e geraremos uma tabela para armazenamento em um determinado período de tempo, log_201806, log_201807, etc. Aqui usamos o mybatis para implementá-lo, e o SQL dinâmico será usado.
O SQL dinâmico é uma das características poderosas dos Mybatis. Antes de pré -compilar as instruções SQL, o mybatis analisará dinamicamente o SQL e a analisará em um objeto Boundsql, que também é usado para processar o SQL dinâmico aqui.
Na análise dinâmica do SQL, os efeitos de #{} e $ {} são diferentes:
#{} analisou um marcador de parâmetro para uma instrução JDBC pré -compilada.
Como a seguinte declaração SQL:
Selecione * do usuário onde nome = #{name}; Será analisado como:
Selecione * do usuário onde o nome =?;
Você pode ver #{} sendo analisado em um espaço reservado para parâmetro? .
$ {} é apenas uma substituição de string pura, a substituição variável será realizada durante o estágio dinâmico de análise SQL.
Como a seguinte declaração SQL:
Selecione * do usuário onde nome = $ {name}; Quando passamos pelo parâmetro "Joanna", o SQL analisará como:
selecione * do usuário onde name = "Joanna";
Você pode ver que a instrução SQL antes da pré -compilação não contém mais o nome da variável.
Para resumir, o estágio de substituição da variável de $ {} está no estágio dinâmico de análise SQL, enquanto a substituição da variável de #{} está no DBMS.
O seguinte implementa a criação dinâmica da tabela Mybatis, determina se a tabela existe e exclui a função da tabela.
Mapper.xml
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "xx.xxx.xx.mapper.operatetableMapper"> <select id = "existtable" parameterType = "string" resultType = "Integer"> Selecione count (*) de Information_schema.Tables onde lcase (tabela_name) =#{tableName} </select> </update> <update id = "createNewTable" parameterType = "string"> crie tabela $ {tableName} (id bigint (20) não nulo auto_increment, entityId bigint (20) não nulo, null não nulo NULL NULL NULL, não duplo, não nulo, dz duplo nulo nulo, ntype varar (32) não NULL, direction float DEFAULT NULL, attributes varchar(255) DEFAULT NULL, PRIMARY KEY (id)) </update> <insert id="insert" parameterType="xx.xxx.xx.po.Trackpoint"> insert into ${tableName} (entityId,dx,dy,dz,ntype,gnssTime,speed,direction,attributes) values ( #{trackpoint.entityId}, #{rastrearpoint.dx}, #{trackpoint.dy}, #{trackpoint.dz}, #{trackpoint.nttype}, #{trackpoint.gnsTime}, #{trackpoint.speed}, #{trackpoint.direction},}, {{trackpoint.speed}, #{trackpoint.Direction}Mapper.java
pacote xx.xxx.xx.mapper;
importar org.apache.ibatis.annotações.param; importar xx.xxx.xx.po.trackpoint; interface pública operatetableMapper {int existtable (string tableName); int DropTable (@param ("tableName") String tableName); int createNewTable (@param ("tableName") string tableName); int insert (@param ("tableName") string tableName,@param ("rastrearpoint") trackpointpoint);}Resumir
O exposto acima é o código de exemplo da tabela de criação dinâmica mybatis apresentada a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!