Mybatis é uma excelente estrutura de camada de persistência que suporta consultas SQL simples, procedimentos armazenados e mapeamento avançado. O MYBATIS elimina as configurações manuais de quase todo o código e parâmetros JDBC e o encapsulamento de pesquisa do conjunto de resultados. O Mybatis pode usar XML simples ou anotações para configuração e mapeamento original, interfaces de mapeamento e POJOS de Java (objetos Java antigos simples) para registros no banco de dados.
Agora que Mybatis está se tornando cada vez mais popular, todo mundo conhece suas vantagens, então não vou dizer muito, apenas fale sobre os pontos -chave.
Mybatis fornece funções SQL dinâmicas. Podemos usar <se> <when> <where> <bem> <foreach> e assim por diante, para que possamos escrever SQL dinâmico gerado de acordo com as condições. No entanto, no meio, há um pequeno mal -entendido da tag <se> que costumamos usar, que cairá se acidentalmente. Deixe -me dar um exemplo normal:
<select id = "findactiveBlogwithtitlelike" parametertype = "blog" resulttype = "blog"> selecione * no blog where state = 'attive' <if test = "title! = null"> e title como #{title} </if> </select>No exemplo acima, quando o título não for igual a NULL, as condições na tag <if> serão unidas, para que a instrução SQL seja dinâmica.
Mas quando julgamos todas as condições, você escreve desta maneira:
<select id = "findactiveBlogwithtitlelike" parametertype = "blog" resulttype = "blog"> selecione * no blog onde <se test = "userId! = null"> state = 'ativo' </if> <se test = "title! = null" e title como #{} </se> </select>Não tem problema, certo? Pelo menos é sintaticamente bom, pelo menos pode gerar um SQL normalmente.
No entanto, não sei se você percebeu que quando todas as condições são nulas, o que acontece?
Selecione * no blog onde
Você viu isso? Esse SQL pode ser executado com sucesso?
A resposta é obviamente não.
Então, o que devo fazer? Lembre -se de que, quando você escreve SQL dinâmico, primeiro considere se todas as condições ocorrerão se todas as condições não forem verdadeiras e se haverá apenas uma de onde, mas sem condições. Então tudo o que você precisa fazer é adicionar uma tag <where> para envolver todas as condições.
<select id = "findactiveBlogWithTitLelike" ParameterType = "blog" resultType = "Blog"> Selecione * do blog <where> <se test = "userID! = null"> state = 'attive' </if> </where> </where> </where> </where> "title!
Dessa forma, quando todas as condições não forem verdadeiras, onde não serão explicitadas.
Neste momento, o amigo inteligente descobriu que, se a primeira condição não for verdadeira e a segunda condição for verdadeira, o SQL se tornará assim?
Selecione * no blog do que e o título como #{title}Não se preocupe, quando você usa a tag <if> para envolver as condições, ela removerá automaticamente e.
O exposto acima é a pequena armadilha do uso de tags SQL dinâmicas do editor para apresentar a você por Mybatis. 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!