Explicación detallada del uso de las etiquetas de corte mybatis

Explicación detallada del uso de las etiquetas de corte mybatis

La etiqueta de corte de mybatis generalmente se usa para eliminar palabras clave redundantes y comas en las declaraciones de SQL, o para unir "dónde", "establecer" y "valores ("y otros prefijos, o agregar ")" y otros sufijos antes de las declaraciones de SQL, que se pueden utilizar Operaciones como inserción selectiva, actualización, eliminación o consulta condicional.

Los siguientes son los atributos involucrados en la etiqueta de corte:

prefijo=agregar prefijo sufijo=agregar sufijo

prefixOverrides=Eliminar prefijo suffixOverrides=Eliminar sufijo

Atributos describir
prefijo El prefijo para el empalme de declaraciones sql
sufijo El sufijo para el empalme de declaraciones sql
prefijoAnula Elimine la palabra clave o el carácter delante de la instrucción sql, la palabra clave o el carácter se especifica mediante el atributo prefixOverrides, asumiendo que el atributo se especifica como "AND", cuando el comienzo de la instrucción sql es "AND", la etiqueta de recorte eliminar el "Y"
anulaciones de sufijo Eliminar palabras clave o caracteres después de la instrucción sql, que se especifican mediante el atributo suffixOverrides

1. Use la etiqueta de recorte para eliminar palabras clave redundantes y (en comparación con dónde)

<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>

¿Qué sucede si ninguna de estas condiciones coincide? Al final, este SQL quedará así:

SELECT * FROM BLOG
WHERE

Esto hace que la consulta falle. ¿Qué pasa si solo la segunda condición coincide? Este SQL terminará así:

SELECT * FROM BLOG
WHERE 
AND title like 'someTitle'

Puede usar la etiqueta where para resolver este problema, el elemento where solo insertará la cláusula "WHERE" si hay al menos un elemento secundario cuya condición devuelve una cláusula SQL. Además, si la instrucción comienza con "Y" u "O", el elemento where también los 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>

La etiqueta de recorte también puede realizar la misma función, escrita de la siguiente manera:

<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 la etiqueta de recorte para eliminar las comas adicionales

inserte la descripción de la imagen aquí
Si las condiciones en el cuadro rojo no coinciden, la instrucción sql será la siguiente:

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

La inserción fallará con comas adicionales.
El uso de la etiqueta de recorte puede resolver este problema con una pequeña cantidad de modificación, de la siguiente manera:
inserte la descripción de la imagen aquí
los atributos más importantes son

suffixOverrides=","

Indica que se elimine la coma adicional al final de la instrucción sql.

Al mismo tiempo, para aclarar la relación entre varios atributos de recorte, los siguientes dos xml son 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>

Es decir al principio:

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

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

Supongo que te gusta

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