Red de conocimiento informático - Conocimiento del nombre de dominio - El uso de pagehelper no realiza consultas paginadas, entonces, ¿por qué se sigue llamando?

El uso de pagehelper no realiza consultas paginadas, entonces, ¿por qué se sigue llamando?

También encontré este problema y luego vi un caso similar en GitHub y obtuve la respuesta oficial:

¿Qué circunstancias conducirán a una paginación insegura?

El método PageHelper. utiliza un parámetro "ThreadLocal" estático y el parámetro de paginación y el hilo están vinculados.

Esto es seguro siempre y cuando se asegure de que el método de consulta MyBatis siga inmediatamente a la llamada al método PageHelper. Esto se debe a que "PageHelper?" borra automáticamente el objeto almacenado en "ThreadLocal?" en la sección de código "¿finalmente?".

Si ocurre una excepción antes de que el código ingrese al "Ejecutor", entonces el hilo no estará disponible, lo cual es un error humano (por ejemplo, cuando una falta de coincidencia entre el método de la interfaz y el XML impide que el "MappedStatement" " de ser encontrado), Esto no resultará en el uso incorrecto del parámetro "ThreadLocal" debido a subprocesos no disponibles.

Pero será un uso inseguro si escribe el siguiente código:

PageHelper.startPage(1, 10);Listlt;Countrygt;list;if(param1 ! = null ){

list = countryMapper.selectIf(param1);

} else {

list = new ArrayListlt;Countrygt;();

}

Debido al valor nulo de param1, esta situación es imposible que suceda, hará que PageHelper genere un parámetro de paginación no utilizado y el parámetro permanecerá en este hilo. Cuando el hilo se usa nuevamente, puede causar que métodos que no deberían paginarse consuman los parámetros de paginación, lo que resulta en una paginación inexplicable.

El código anterior debe escribirse de la siguiente manera:

Listlt; Countrygt; if(param1 ! = null){ PageHelper.startPage(1, 10);

lista = countryMapper.selectIf(param1);

} else {

lista = new ArrayListlt;Countrygt;();

}

Es seguro escribir de esta manera.

Si no está seguro de esto, puede limpiar manualmente los parámetros de paginación almacenados por "ThreadLocal" de la siguiente manera:

Listlt;Countrygt;list;if(param1 ! = null ) { PageHelper.startPage(1, 10); prueba{

list = countryMapper.selectAll();

} finalmente { PageHelper.clearPage(); > }

} else {

list = new ArrayListlt;Countrygt;();

}

Esto es feo e innecesario.

Dirección original: enlace al sitio web