Eu usei Mybatis recentemente. Eu já usei ibatis antes. No geral, é semelhante, mas ainda encontrei muitos problemas. Vou gravar novamente.
Por exemplo, a diferença entre usar #{} e $ {} transmissão de parâmetros,
Use # para passar no parâmetro, e a análise SQL Declarenting adicionará "", por exemplo, selecione * da tabela onde o nome = # {nome}, o nome passado é Xiao Li, então a última impressão é
Selecione * da tabela onde nome = 'xiao li', ele será analisado como uma string. Isso é obviamente melhor que $. A passagem do parâmetro #{} pode impedir a injeção de SQL. Se o parâmetro que você passar for uma única citações, se você usar $ {}, esse método relatará um erro.
Outro cenário é que, se você quiser fazer classificação dinâmica, como a ordem por coluna, não se esqueça de usar $ {} neste momento, porque se você usar #{}, então o impresso será
Selecione * da ordem da tabela por 'nome', isso é inútil,
No momento, se você pode usar #, não use $.
Diferença entre # e $ em mybatis
1. # Trate todos os dados recebidos como uma string e adicione cotações duplas aos dados automaticamente recebidos. Por exemplo: Ordem por #user_id #, se o valor passado é 111, o valor ao analisar o SQL é a ordem de "111". Se o valor aprovado for ID, o analisado no SQL é a ordem por "ID".
2. $ Exibe os dados passados diretamente e o gera no SQL. Por exemplo: Ordem por $ user_id $, se o valor passado é 111, o valor quando analisado no SQL é a ordem por user_id. Se o valor aprovado for ID, o analisado no SQL é a ordem por ID.
3. O método # pode impedir bastante a injeção de SQL.
4. O método $ não pode impedir a injeção de SQL.
5. O método $ geralmente é usado para passar nos objetos do banco de dados, como a passagem nos nomes da tabela.
6. Geralmente, se você pode usar #, não use $.
Ao usar o pedido por parâmetros dinâmicos ao classificar Mybatis, você precisa prestar atenção ao uso de $ em vez de #
Substituição de string
Por padrão, o uso da sintaxe #{} Format faz com que o MYBATIS crie uma propriedade de instrução pré -processada e defina um valor seguro com ele como plano de fundo (como?). Isso é seguro e rápido, e às vezes você só deseja inserir uma string que não muda diretamente na instrução SQL. Por exemplo, como a ordem por, você pode usá -lo assim:
Encomende por $ {columnName}
Aqui Mybatis não modificará ou escapará de cordas.
IMPORTANTE: Não é seguro aceitar a saída de conteúdo do usuário e fornecê -lo a uma string inalterada na instrução. Isso pode levar a possíveis ataques de injeção de SQL; portanto, você não deve permitir que os usuários entrem nesses campos ou geralmente escapem e verifiquem você mesmo.
Um breve resumo da diferença entre $ e # em mybatis
Há pouco tempo, alguém veio à nossa empresa para uma entrevista. Nosso gerente fez essa pergunta. Eu tinha apenas um pouco de entendimento disso, então fui para o Baidu.
De fato, a diferença é muito simples. Você vai entender com um exemplo. Escreva uma frase sql-por exemplo: selecione * de user_role onde user_code = "100";
Nesta frase, ela precisa ser escrita como selecionada * de $ {tableName} onde user_code = #{userCode}
Portanto, o caractere $ é escrito diretamente no SQL, enquanto o caractere # será escrito com SQL na forma de uma string.