La diferencia y el uso de la etiqueta where y la etiqueta trim en mybatis

1. Múltiples condiciones de consulta

Bajo múltiples condiciones de consulta, donde 1 = 1 se agregará delante debido a la necesidad de empalmar declaraciones sql

	<select id="queryList" resultMap="BasBusinessTypeExtendsMap">
	    select
	    <include refid="Base_Column_List"></include>
	    from bas_business_type_setting
	    where 1 = 1
	    <if test="params.dictType != null">
	        and dict_type = #{
    
    params.dictType}
	    </if>
	    <if test="params.libraryType != null">
	        and library_type = #{
    
    params.libraryType}
	    </if>
	</select>

Aunque el método de escritura anterior de 1 = 1 puede realizar la función, existe el riesgo de inyección SQL y puede causar la invalidación del índice y el escaneo completo de la tabla, por lo que se puede usar la etiqueta where en lugar de where 1 = 1

2. El uso de etiquetas where

Use la etiqueta where en lugar de where 1=1

    <select id="count" resultType="java.lang.Long">
        select count(1)
        from bas_building
        <where>
            <if test="params.id != null">
                and id = #{
    
    params.id}
            </if>
            <if test="params.idList != null and params.idList.size() > 0 " >
                and id in
                <foreach collection="params.idList" item="idItem" index="index" open="(" close=")" separator=",">
                    #{
    
    idItem}
                </foreach>
            </if>
            <if test="params.buildingNo != null and params.buildingNo != ''">
                and building_no = #{
    
    params.buildingNo}
            </if>
        </where>
    </select>

[Función]
Eliminar automáticamente "Y" u "O" en la primera condición

Nota:
1. De acuerdo con el método de escritura estándar, el AND en la primera etiqueta if no debe escribirse, pero no informará un error incluso si se escribe durante el desarrollo. Porque la etiqueta where eliminará automáticamente el primer enlace AND. Sin embargo, dentro de la etiqueta if después de la segunda, debe haber un enlace AND.
2. Si no se cumple ninguna de las condiciones, devuelva todas las entradas.

3. El uso de etiquetas de corte

La función de esta etiqueta es similar a where y, además, proporciona funciones de prefijo y sufijo. El uso específico es el siguiente:

    <select id="count" resultType="java.lang.Long">
        select count(1)
        from bas_building
        <trim prefix="where" prefixOverrides="and|or">
            <if test="params.id != null">
                and id = #{
    
    params.id}
            </if>
            <if test="params.idList != null and params.idList.size() > 0 ">
                and id in
                <foreach collection="params.idList" item="idItem" index="index" open="(" close=")" separator=",">
                    #{
    
    idItem}
                </foreach>
            </if>
            <if test="params.buildingNo != null and params.buildingNo != ''">
                and building_no = #{
    
    params.buildingNo}
            </if>
        </trim>
    </select>

[Función]
1. Puede usar trim en lugar de etiqueta where.
2. El atributo prefijo="donde", significa: agregar el prefijo donde.
3. El atributo sufijo=")", significa: añadir sufijo).
4. Atributo prefixOverrides="y|o", anulación de prefijo: anula automáticamente el primero y o o.
5. Atributo suffixOverrides="", anulación de sufijo: elimine los caracteres redundantes detrás de toda la cadena.

4. extensión de recorte

La etiqueta de recorte tiene más escenarios de uso que donde, de la siguiente manera:

<if test="params.businessTypeList != null and params.businessTypeList.size() > 0 ">
    <trim prefix="and ( " prefixOverrides="AND|OR" suffix=" )">
        <foreach collection="params.businessTypeList" item="idItem" index="index">
            OR FIND_IN_SET( #{
    
    idItem}, space_types )
        </foreach>
    </trim>
</if>

Combine varias condiciones de sql durante el ciclo, use el atributo prefixOverrides de la etiqueta de recorte para sobrescribir el primero y o, agregue "y (" al sufijo y ")" al prefijo y genere dinámicamente un sql que cumpla con múltiples condiciones .

Supongo que te gusta

Origin blog.csdn.net/qq_42547733/article/details/129023139
Recomendado
Clasificación