Principio de estrategia perezosa: solo cuando los datos devueltos por la consulta SQL se usan en realidad se emiten a la base de datos, de lo contrario no se emitirá (se utilizará principalmente en consultas conjuntas de múltiples tablas)
1. Carga perezosa individual:
Supongamos que hay una tabla de persona y una tabla de tarjetas en la base de datos: la tabla de personas tiene campos PID, PNAME, PAGE, PSEX, CID y Tarjeta Tabla tiene campos CID, CNUM;
Supongamos que desea consultar el nombre y el número de identificación de alguien:
Principio: Al consultar el nombre, la versión real no consulta el número de identificación. Solo cuando la estación actual use el número de identificación, emitirá una consulta a la tarjeta. Es una estrategia para consultar el número de identificación;
Ejemplo de implementación:
Pasos de implementación:
1-Import MyBatis Dependency Jar Paquete
2-ADD LOG4J FILE (puede ver los programas de ejecución reales en la memoria)
1-P-PRINCIÓN: solo cuando la estación actual usa el número de identificación, la consulta a la tarjeta se emitirá, de lo contrario solo se emite la consulta a la información de la persona.
2-abre vago: en conf.xml
<nettings> <setting name = "LazyLoadingEnabled" value = "true"/> <setting name = "agressiveLAyLoading" value = "false"/> </etenchings>
3. Implementación:
(1) En el archivo de asignación mapper.xml:
<select id = "findcid" parametertype = "int" resultType = "tarjeta"> select * de la tarjeta donde cid =#{value} < /select> <resultmap type = "persona" id = "p_c1"> <id columna = "pid" PROPERTA = "PID" /> <<Page de resultado /<pname "de resulta <resultado <Resultado <resultado" Resultado /"Resultado" columna = "psex" propiedad = "psex"/> <asociación propiedad = "tarjeta" javatype = "tarjeta" select = "findcid" column = "cid"> </sociation> </resultmap> <select id = "selectpersonAndCardLazyBypid" parametType = "int" resultMap = "P_C1"> SELECT * de la persona donde PID =#{Value} <</} </SELEC 1-selección: especifique la declaración de consulta asociada
2 columna: especifique qué valor de campo en la declaración principal se pasa como un parámetro a la declaración SQL de esclavos
(2) Defina el método en la interfaz mapper:
Persona pública SelectPersonandCardlazyBypid (int pid);
(3) Pruebe los resultados con JUnit:
1. Aquí hay una consulta que solo envía información de la persona;
@Test public void testSelectPersonAndCardLazyBypid () {// Política perezosa Persona individual P = PM.SelectpersonAndCardlazyByPID (1); //System.out.println(p); System.out.println (p.getpname ()+","); //System.out.println(p.getpname ()+","+p.getCard (). GetCnum ()); }La declaración de consulta de ejecución de resultados:
2. La consulta de la tarjeta solo se emite cuando la estación actual usa el número de identificación
@Test public void testSelectPersonAndCardLazyBypid () {// Política perezosa Persona individual P = PM.SelectpersonAndCardlazyByPID (1); //System.out.println(p); System.out.println (p.getpname ()+","); System.out.println (p.getpname ()+","+p.getCard (). GetCnum ()); // La consulta para la tarjeta se emite cuando la estación actual usa el número de identificación}La declaración de consulta de ejecución de resultados:
2. Carga perezosa de uno a muchos:
Ejemplo de implementación:
Suponga que hay una tabla de personas y una tabla de información de identidad de tarjeta en la base de datos, la tabla de direcciones de sumador: donde hay campos pid en la tabla de personas, nombre, página, psex, CID, tabla de tarjetas y campos en la tabla de sumas; La tabla de sumas tiene ayuda de campos, ashi, pid
Supongamos que desea consultar el nombre y la dirección de alguien, y su número de identificación:
(1) Archivo de asignación mapper.xml:
< id = "p_c1_a1"> <id columna = "pid" propiedad = "pid" /> <resultado columna = "pname" propiedad = "pname" /> <resultado columna = "página" propiedad = "página" /> <resultado columna = "psex" propiedad = "psex" /> <asociación propiedad = "card" javatype = "tarjeta" seleccionar = "find1" columna = "columna cid" cid "cid" "cid" Propiedad = "Adder" oftype = "adder" select = "fingcard_adder" columna = "pid"> </collection> </resultmap> <select id = "selectPersonandCardandAdadderlazyByPid" Parametype = "int" resultmap = "P_C1_A1"> SELECT * de la persona donde pid =#{value} </select>(2) Método de definición de interfaz de mapper:
1. Aquí hay una consulta que solo envía información de la persona;
@Test public void testSelectPersonandCardAndAdDderlazyBypid () {// Política perezosa Una persona de uno a muchos p = PM.SelectpersonandCardandAdAdDderlazyByPID (1); System.out.println (p.getpname ()+","); /// Aquí hay una consulta que solo envía información de la persona}La declaración de consulta de ejecución de resultados:
2. Aquí hay una consulta para emitir información de la persona e información de identidad;
@Test public void testSelectPersonandCardAndAdDderlazyBypid () {// Política perezosa Una persona de uno a muchos p = PM.SelectpersonandCardandAdAdDderlazyByPID (1); System.out.println (p.getpname ()+","); // Aquí hay una consulta que solo emite información de la persona; System.out.println (p.getpname ()+","+p.getCard (). GetCnum ()); // Aquí hay una consulta que emite información de la persona e información de identidad; }La declaración de consulta de ejecución de resultados:
3. La consulta de información de la persona, información de identidad e información de dirección se emite aquí;
@Test public void testSelectPersonandCardAndAdDderlazyBypid () {// Política perezosa Una persona de uno a muchos p = PM.SelectpersonandCardandAdAdDderlazyByPID (1); System.out.println (p.getpname ()+","); // Esta es una consulta que solo emite información de la persona; System.out.println (p.getpname ()+","+p.getCard (). GetCnum ()); // Esta es una consulta que emite información de persona e información de identidad; //System.out.println(p.getpname ()+","+p.getCard (). GetCnum ()); para (adder adder: p.getadder ()) {///// consulta de información de la persona, información de identidad e información de dirección se emite aquí; System.out.println (adder.getAshi ()); }} La declaración de consulta de ejecución de resultados:
Resumir
Lo anterior es el método de retraso de la estrategia perezosa en MyBatis presentada a usted. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje. ¡El editor le responderá a tiempo!