Explicação detalhada do uso de tags de corte mybatis

Explicação detalhada do uso de tags de corte mybatis

A tag trim de mybatis é geralmente usada para remover palavras-chave e vírgulas redundantes em instruções SQL, ou para unir "where", "set" e "values(" e outros prefixos, ou adicionar ")" e outros sufixos antes de instruções SQL, que podem ser usadas Operações como inserção seletiva, atualização, exclusão ou consulta condicional.

A seguir estão os atributos envolvidos na tag de corte:

prefix=adicionar prefixo suffix=adicionar sufixo

prefixOverrides=Remover prefixo suffixOverrides=Remover sufixo

Atributos descrever
prefixo O prefixo para splicing de instrução sql
sufixo O sufixo para splicing de instrução sql
prefixOverrides Remova a palavra-chave ou caractere na frente da instrução sql, a palavra-chave ou caractere é especificado pelo atributo prefixOverrides, supondo que o atributo seja especificado como "AND", quando o início da instrução sql for "AND", a tag de corte será remova o "E"
suffixOverrides Remova palavras-chave ou caracteres após a instrução sql, que são especificados pelo atributo suffixOverrides

1. Use a tag de corte para remover palavras-chave e palavras-chave redundantes (em comparação com where)

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG 
  WHERE 
  <if test="state != null">
    state = #{state}
  </if> 
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

O que acontece se nenhuma dessas condições corresponder? No final, esse SQL ficará assim:

SELECT * FROM BLOG
WHERE

Isso faz com que a consulta falhe. E se apenas a segunda condição corresponder? Este SQL ficará assim:

SELECT * FROM BLOG
WHERE 
AND title like 'someTitle'

Você pode usar a tag where para resolver este problema, o elemento where só irá inserir a cláusula "WHERE" se houver pelo menos um elemento filho cuja condição retorne uma cláusula SQL. Além disso, se a instrução começar com "AND" ou "OR", o elemento where também os eliminará.

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG 
  <where> 
    <if test="state != null">
         state = #{state}
    </if> 
    <if test="title != null">
        AND title like #{title}
    </if>
    <if test="author != null and author.name != null">
        AND author_name like #{author.name}
    </if>
  </where>
</select>

A tag de corte também pode realizar a mesma função, escrita da seguinte forma:

<trim prefix="WHERE" prefixOverrides="AND">
	<if test="state != null">
	  state = #{state}
	</if> 
	<if test="title != null">
	  AND title like #{title}
	</if>
	<if test="author != null and author.name != null">
	  AND author_name like #{author.name}
	</if>
</trim>

2. Use a tag de corte para remover vírgulas extras

insira a descrição da imagem aqui
Se as condições na caixa vermelha não forem atendidas, a instrução sql será a seguinte:

INSERT INTO role(role_name,) VALUES(roleName,)

A inserção falhará com vírgulas extras.
O uso da tag de corte pode resolver esse problema com uma pequena modificação, como segue:
insira a descrição da imagem aqui
os atributos mais importantes são

suffixOverrides=","

Indica para remover a vírgula extra no final da instrução sql.

Ao mesmo tempo, para esclarecer a relação entre vários atributos de trim, os dois xmls a seguir são equivalentes

<insert id="insertSelective">
   insert into BZ_EVENTINFOGS
   (
      <if test="eventinfoid != null">
        EVENTINFOID,
      </if>
      <if test="eventinfoname != null">
        EVENTINFONAME,
      </if>
   )
   values (
      <if test="eventinfoid != null">
        #{eventinfoid,jdbcType=VARCHAR},
      </if>
      <if test="eventinfoname != null">
        #{eventinfoname,jdbcType=VARCHAR},
      </if>
   )

Equivalente a

<insert id="insertSelective">
   insert into BZ_EVENTINFOGS
   <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="eventinfoid != null">
        EVENTINFOID,
      </if>
      <if test="eventinfoname != null">
        EVENTINFONAME,
      </if>
   <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="eventinfoid != null">
        #{eventinfoid,jdbcType=VARCHAR},
      </if>
      <if test="eventinfoname != null">
        #{eventinfoname,jdbcType=VARCHAR},
      </if>

Ou seja, no início:

prefix=添加前缀 suffix=添加后缀

prefixOverrides=去掉前缀 suffixOverrides=去掉后缀

Acho que você gosta

Origin blog.csdn.net/qq_27480007/article/details/130894678
Recomendado
Clasificación