MyBatis (VIII): resultados de los mapas avanzada

Este artículo está de acuerdo con Dios loco dijo notas videos de instrucción para aprender, muy recomendable, de nuevo en la enseñanza de lenguaje común de entender! b Búsqueda loca Dios diga o haga clic en el siguiente enlace

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

Estados-tabla de consulta

Preparación del entorno

  • Dos mesa muy simple, tabla registra pk maestro del estudiante

 

 

Cero, con una simple búsqueda en la tabla

  • Los siguientes dos clases de entidad, los estudiantes registran pk mesa del profesor ----> Identificación del Maestro es Estudiante de tres veces al día.

// omitido sin parámetros, hay parámetros de configuración, consiga, conjunto, anulación toString 
pública  de clase Estudiante {
     Privado  int ID;
     Privada String nombre;
     Privada  int TID; 
} 
pública  de clase del profesor {
     Privado  int ID;
     Privada String nombre; 
}

 

1. Si cada estudiante necesita es averiguar información y que corresponde el nombre del maestro, entonces la instrucción SQL debe ser
 
seleccione s. *, t, nombre del estudiante s, t donde el maestro s.tid = t.id

 

2. Dirigir los resultados en el mapa dentro de él
  • Mapper.xml

<asignador de espacio de nombres = "com.rzp.dao.StudentMapper"> 
    <select id = "mapa" "getByTeacher" resultType => 
            seleccionar s. *, t.name como tname de estudiante s, t donde el maestro t.id = s.tid
     </ select> 
</ mapeador>

 

  • Interfaz Mapper
pública  interfaz StudentMapper { 
    Lista <HashMap> getByTeacher (); 
}

 

  • prueba

    @Test
     pública  vacío getByTeacher () { 
        SqlSession sqlSession = MybatisUtils.getSqlSession (); 
        StudentMapper mapper = sqlSession.getMapper (StudentMapper. Clase ); 
        Lista <HashMap> studentList = mapper.getByTeacher ();
        para (Mapa estudiante: studentList) {
             // 通过obtener方法可以直接取出来 
            System.out.print (student.get ( "id") +"" ); 
            System.out.print (student.get ( "nombre") +"" ); 
            System.out.print (student.get ( "TID") +""  );
            System.out."tname") +"" ); 
            System.out.println (); 
        } 
        SqlSession.close (); 
    }

 

 

 

3. De esta manera si usted acaba de hacer algunas estadísticas deben ser relativamente fácil de usar, pero si Shihai no tan directo como en este caso una temperatura propiedad Riga Student, sino también directamente a un conjunto tan genérica de Lista de Estudiantes, la operación más conveniente Estudiante .
4. Sin embargo, los siguientes dos casos no es fácil de usar:
  • Si la entidad es otro objeto de la clase de entidad clase de atributo, como una propiedad, no hay objeto, Maestros y Estudiantes.

     

     

  • O es una entidad atributos de clase de otra clase de entidad es un recipiente, tal como una Lista Maestra de Estudiantes de allí.

 

 

  • Este tiempo es necesario el uso de un objeto (Associtation) y el conjunto de resultados de mapeo conjunto (Colección) propiedad.

  • Mi entendimiento es en realidad las propiedades del conjunto de resultados de asignación ordinaria reemplazar Associtation que se siente en el archivo XML también define una clase de entidad, que se opone al uso Associtation definido.

Associtation

En primer lugar, de acuerdo con un procesamiento de consulta anidada

  • Estudiante en el Maestro sujeto a la

// omitido sin parámetros, hay parámetros de configuración, consiga, conjunto, anulación toString 
pública  de clase Estudiante {
     Privado  int ID;
     Privada String nombre;
     Privada  int TID;
     Privada Profesor Profesor; 
} 
pública  de clase del profesor {
     Privado  int ID;
     privada Cadena nombrar; 
}

 

  • Interfaz Mapper

pública  interfaz StudentMapper {
     // obtener toda la información a los estudiantes 
    Lista <Estudiante> getAllStudent (); 
}

 

  • Mapper.xml

<Mapper namespace = "com.rzp.dao.StudentMapper"> 
    <! - consulta correspondiente a todos los estudiantes y profesores, pensamiento:
     1 Toda consulta la información del estudiante.
     2 de acuerdo a las consultas de los estudiantes tres veces al día encontrar el profesor correspondiente.
     -> 
    <SELECT ID = "getAllStudent" la resultMap = "StudentMap"> 
        SELECT * de Student
     </ SELECT> 
    <la resultMap ID = "StudentMap" type = "Student"> 
        <- propiedades complejas, necesidad de ser procesada por separado :! conjunto Associtation: colección -> 
        <!- asignación de conjunto de resultados se define en un "objeto" (Associtation) Propiedades de 
        la propiedad --- nombre del estudiante en este objeto 
        el javaType --- estudiante de la clase en este objeto 
        SELECT --- conseguir esta consulta de objeto (método) 
        de columna--- Esta declaración Parámetro a introducir, la pluralidad es = columna "{el prop1 = col1, col2 = prop 2}" 
        -> 
        <Propiedad = Asociación "Maestro" columna = "TID" la javaType = "Maestro" SELECT = " getAllStudendTest "/> 
    </ el resultMap> <SELECT ID =" getAllStudendTest "la resultType =" Maestro "> 
        SELECT * donde a partir de Maestro ID = # {ID}
     </ SELECT> 
</ Mapper>
    
        

 

  • Métodos de prueba

    // 查询所有学生
    @test
     pública  vacío getAllTeacher () { 
        SqlSession sqlSession = MybatisUtils.getSqlSession (); 
        StudentMapper mapper = sqlSession.getMapper (StudentMapper. Clase ); 
        Lista <Estudiante> studentList = mapper.getAllStudent ();
        para (estudiante Estudiante: studentList) { 
            System.out.println (estudiante); 
        } 
        SqlSession.close (); 
    }

 

  • De esta manera el sentimiento personal no está en línea con las consultas generales de pensamiento, más como subconsultas anidadas.

En segundo lugar, de acuerdo con los resultados del procesamiento anidado

  • Interfaz Mapper

     // acuerdo con el resultado del procesamiento de la anidada 
    List <Student> getAllStudent2 ();

 

  • Mapper.xml

    <select id = "getAllStudent2" resultMap = "StudentMap2"> 
        seleccione s.id, s.name, s.tid, t.name tname 
        de estudiante s, t profesor 
        , donde s.tid = t.id
     </ select> 
    <resultMap id = tipo "StudentMap2" = "Estudiante"> 
        <property resultado = "id" columna = "id" /> 
        <result propiedad = columna "nombre" = "nombre" /> 
        <result propiedad = columna "tid" = "tid "/> 
        <propiedad de asociación =" maestro" javaType = "maestro"> 
            <property resultado = "nombre" columna = "tname"/> 
        </ asociación>
    </ resultMap>

 

  • prueba

    // 查询所有学生2 
    @test
     pública  vacío getAllTeacher2 () { 
        SqlSession sqlSession = MybatisUtils.getSqlSession (); 
        StudentMapper mapper = sqlSession.getMapper (StudentMapper. Clase ); 
        Lista <Estudiante> studentList = mapper.getAllStudent2 ();
        para (estudiante Estudiante: studentList) { 
            System.out.println (estudiante); 
        } 
        SqlSession.close (); 
    }

 


 

 

  • Nota: Entre los resultados de la prueba, profesor Identificación del objeto es 0, personalmente creo que gran parte como un parámetro de constructor.

 

 

colección

En tercer lugar, de acuerdo con los resultados del procesamiento anidado

  • clase de entidad

público  de clase Estudiante {
     privada  int Identificación;
    privada String nombre;
    privada  int tres veces al día; 
} 
Pública  de clase del profesor {
     privada  int Identificación;
    privada String nombre;
    privada Lista <Estudiante> studentsList; 
}

 


  • Mapper.xml

    <! -按结果嵌套查询-> 
    <select id = "TeacherMap" "getTeacherById" resultMap => 
        seleccionar s. * , T.name tname de estudiante s, t profesor 
        , donde s.tid = t.id y t.id = # {} tid
     </ select> <resultMap id = tipo "TeacherMap" = "Maestro"> 
        <propiedad consecuencia = columna "nombre" = "tname" /> 
        <propiedad de colección = "studentsList" OfType = "Estudiante"> 
            <result propiedad = columna "id" = "id" /> 
            <property resultado = columna "nombre" = "nombre" /> 
            <property resultado = "tid" columna ="
    

 

  • Interfaz Mapper

    Maestro getTeacherById (@Param ( "tid") int id);

 

  • prueba

    @Test
     pública  vacío test1 () { 
        SqlSession sqlSession = MybatisUtils.getSqlSession (); 
        TeacherMapper mapper = sqlSession.getMapper (TeacherMapper. Clase ); 
        Profesor Profesor = mapper.getTeacherById (1 ); 
        System.out.println (maestro); 
        sqlSession.close (); 
    }

 

 

 

En cuarto lugar, de acuerdo con un procesamiento de consulta anidada

  • Mapper.xml

    <! -按查询嵌套处理-> 
    <select id = "getTeacherById2" resultMap = "TeacherMap1"> 
        seleccione t. * Desde el maestro t donde t.id = # {id}
     </ select> 

    <resultMap id = tipo "TeacherMap1" = "Maestro"> 
        <property resultado = columna "id" = "id" /> 
        <! - ofType- -泛型-> 
        <propiedad de colección = "studentsList" javaType = "ArrayList" OfType = columna "Estudiante" = "id" select = "getStudent" /> 
    </ resultMap> 

    <select id = "getStudent" resultType = "Estudiante ">

 

  • Interfaz Mapper

   Maestro getTeacherById2 ( int id);

 

  • prueba

    @Test
     pública  vacío test2 () { 
        SqlSession sqlSession = MybatisUtils.getSqlSession (); 
        TeacherMapper mapper = sqlSession.getMapper (TeacherMapper. Clase ); 
        Profesor Profesor = mapper.getTeacherById2 (1 ); 
        System.out.println (maestro); 
        sqlSession.close (); 
    }

 

 

 

contraste

  • De acuerdo con los resultados de la consulta, complejo sql, menos el número de consultas, estructura XML simple.

  • Presione el procesamiento de consultas anidadas, simple consulta SQL en muchas ocasiones, complicada estructura XML.

Personalmente, creo que los resultados de la consulta por una compleja estructura más simple, XML pueden ser difíciles de solucionar.

Supongo que te gusta

Origin www.cnblogs.com/renzhongpei/p/12590310.html
Recomendado
Clasificación