MyBatis-Dynamic SQL-si y donde

SQL dinámico

  • Las sentencias de SQL que cambian con la entrada del usuario o los cambios en las condiciones externas se denominan sentencias de SQL dinámicas.

  •  
  •         select *
            from emp
            where name like concat('%', #{name}, '%')
              and gender = #{gender}
              and entrydate between #{begin} and #{end}
            order by update_time desc;
  • En la declaración SQL anterior, solo después de que se establezcan las tres condiciones de nombre, género y fecha de entrada , se puede realizar la consulta correcta, pero si desea realizar la consulta de una determinada condición solo, necesita usar un SQL dinámico declaración

si etiqueta

  • <si>: se utiliza para determinar si la condición es verdadera. Use el atributo de prueba para el juicio condicional, si la condición es verdadera, empalme SQL
  • La instrucción SQL modificada es
    •         select *
              from emp
              where
              <if test="name!=null">
                  name like concat('%', #{name}, '%')
              </if>
              <if test="gender!=null">
                  and gender = #{gender}
              </if>
              <if test="begin!=null and end!=null">
                  and entrydate between #{begin} and #{end}
              </if>
              order by update_time desc;
  • Ejecute el siguiente método

    •     public void TestList() {
              List<Emp> list = empMapper.List("张", null, null, null);
              System.out.println(list);
          }
    • Pase solo el atributo de nombre

  • El resultado de la operación es el siguiente

    • Consulta la información de todos los empleados de apellido Zhang

  • hay un problema

    • Cuando el nombre en la condición de consulta es nulo, se informará un error de sintaxis de la siguiente manera:

    •  
    • Contiene la palabra clave y después de donde, se produce un error de sintaxis
  • problema resuelto
    • Agregue la etiqueta <where> a la instrucción SQL en el archivo de mapeo XML
    • El código específico es el siguiente:
    •         select *
              from emp
              <where>
                  <if test="name!=null">
                      name like concat('%', #{name}, '%')
                  </if>
                  <if test="gender!=null">
                      and gender = #{gender}
                  </if>
                  <if test="begin!=null and end!=null">
                      and entrydate between #{begin} and #{end}
                  </if>
              </where>
              order by update_time desc;

       

    • El resultado de la operación es el siguiente:

resumen

  • Etiqueta <if>: se utiliza para determinar si la condición es verdadera. Use el atributo de prueba para el juicio condicional, si la condición es verdadera, empalme la declaración SQL
  • Etiqueta <where>: el elemento where solo insertará la cláusula where cuando el elemento secundario tenga contenido, y eliminará automáticamente el y o o al principio de la cláusula

 

Supongo que te gusta

Origin blog.csdn.net/weixin_64939936/article/details/132112415
Recomendado
Clasificación