mybatis contiene un problema de consulta de paginación de uno a muchos

En los negocios, a veces es necesario utilizar la combinación izquierda para consultar tablas de combinación, y debe realizar manualmente la consulta de paginación de límite, pero mybatis primero debe realizar la consulta de paginación y luego mapear la estructura de datos. Por ejemplo, cuando necesita dividir 10 registros en una página, la base de datos encuentra 10. Como resultado, es posible que no se devuelvan 10 registros al front-end después del resultado del mapeo mybaits, lo que hace que la página del front-end se muestre de forma anormal. Esto se debe a que mybatis nos ayuda a asignar los mismos registros de la tabla de la izquierda al mismo objeto, mientras que varios registros de la tabla de la derecha se asignan a la colección. Entonces, ¿cómo podemos asegurarnos de que haya 10 registros diferentes en la tabla de la izquierda?

Método uno (selección de colección)

El primer método puede utilizar el mapeo de subconsultas, pero la desventaja es que se generarán varias sentencias sql, lo que provocará una degradación del rendimiento
como se muestra en la figura siguiente. Si encuentra la imagen en Internet, puede seleccionar la colección Baidu mybatis por usted mismo, principalmente especificando la subselección en la etiqueta de colección Consulta, y luego pasar los campos de la columna a la subconsulta para que sirvan como condiciones de consulta. En pocas palabras, en lugar de unirse a la tabla, verifica sus respectivos resultados y luego empaqueta los resultados juntos . Aunque obtiene los resultados deseados, las consecuencias son Cada vez que se encuentra un registro de consulta principal, se generará una declaración SQL de subconsulta para consultar los datos multiparte correspondientes. Se puede imaginar que afectará mucho el rendimiento y no se recomienda.
Inserte la descripción de la imagen aquí

Método dos (consulta anidada)

Otra forma es usar consultas anidadas directamente en sql, como

select A.xxx, B.xxx from 
( select A.xxx, A.xxx, A.xxx from a_table A limit 0,10 ) as A 	 -- 先分好页得到结果再联表
left join b_table B on A.xx = B.xx 
left join ......

En pocas palabras, es encontrar los 10 datos de la tabla principal para formar una tabla temporal y luego consultar la tabla con la tabla deseada.

Si hay otras formas o algo anda mal, por favor corríjame, aprendan y progresen juntos. ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_45879810/article/details/110952655
Recomendado
Clasificación