Preparación del entorno
-
Dos mesa muy simple, tabla registra pk maestro del estudiante
-
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.