Directorio artículo
- 1. Muchos-a
- Tabla 1.1 para crear estudiante, profesor tablas en MySQL
- 1.2 clase de entidad de escritura
- 1.3 Interfaz de escritura
- 1.4 interfaz para escribir el archivo de configuración correspondiente
- 1.5 determinan los dos archivos XML están unidos al archivo de configuración SqlMapConfig.xml núcleo
- 1.6 clases de prueba de escritura
- 2. muchos
1. Muchos-a
Más estudiantes están asociados con el mismo maestro de centrado en el estudiante más
Tabla 1.1 para crear estudiante, profesor tablas en MySQL
CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');
CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,`student``student``user``teacher`
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
1.2 clase de entidad de escritura
categorías de maestros:
package com.zz.pojo;
import lombok.Data;
@Data
public class Teacher {
private int id;
private String name;
}
categorías de estudiantes:
package com.zz.pojo;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
//学生关联老师
private Teacher teacher;
}
1.3 Interfaz de escritura
TeacherMapper interfaz vacío:
package com.zz.mapper;
public interface TeacherMapper {
}
StudentMapper Interfaz:
hay maneras de obtener una lista de los estudiantes
package com.zz.mapper;
import com.zz.pojo.Student;
import java.util.List;
public interface StudentMapper {
//获取所有学生及学生对应老师的信息
List<Student> getStudents();
}
1.4 interfaz para escribir el archivo de configuración correspondiente
TeacherMapper.xml vaciar:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zz.mapper.TeacherMapper">
</mapper>
StudentMapper.xml perfil:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zz.mapper.StudentMapper">
<!--获取所有学生及学生对应老师的信息:
1. 获取所有学生的信息
2. 获取所有学生的tid,然后再去老师表中查询这个id所对应的老师
-->
<resultMap id="StudentTeacher" type="Student">
<id property="id" column="sid"/>
<result property="name" column="sname"/>
<!--数据库中的tid是一个字段,而teacher是一个对象,所以不能使用result标签
这是多对一的情况,采用association标签(关联) student表关联teacher表,
且这个teacher对象是Teacher类型
-->
<association property="teacher" javaType="Teacher">
<id property="id" column="tid"/>
<result property="name" column="tname"/>
</association>
</resultMap>
<select id="getStudents" resultMap="StudentTeacher">
select s.id sid,s.name sname,t.name tname,t.id tid
From student s,teacher t
WHERE s.tid=t.id
</select>
</mapper>
1.5 determinan los dos archivos XML están unidos al archivo de configuración SqlMapConfig.xml núcleo
método de exploración de paquetes se unen, respectivamente, lleve a cabo uno no se unen
<mappers>
<!--通过扫描包来绑定-->
<package name="com.zz.mapper"/>
</mappers>
1.6 clases de prueba de escritura
Debido a que es el uso de los estudiantes-muchos maestros de unión, por lo que los estudiantes escriben la clase de prueba que corresponde
a escribir la clase de prueba StudentMapperTest
package com.zz.mapper;
import com.zz.pojo.Student;
import com.zz.utils.MyBatisUtils;
import org.junit.Test;
import java.util.List;
public class StudentMapperTest {
@Test
public void testGetStudents(){
StudentMapper mapper = MyBatisUtils.getSession().getMapper(StudentMapper.class);
List<Student> students = mapper.getStudents();
for (Student student : students) {
System.out.println(student);
}
}
}
El resultado:
2. muchos
Disponible a través de profesor y el estudiante, centrados en el profesor
pasos son los mismos, sólo que en este escrito es diferente de la anterior
preparación (1) de una clase de entidad
package com.zz.pojo;
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
//老师对应多个学生 (包含:集合)
private List<Student> students;
}
package com.zz.pojo;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private int tid;
}
(2) Interfaz de escritura
package com.zz.mapper;
import com.zz.pojo.Teacher;
public interface TeacherMapper {
//获取这个老师下的所有学生
public Teacher getTeacher(int id);
}
(3) escribir un archivo de configuración de interfaz
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zz.mapper.TeacherMapper">
<resultMap id="TeacherStudent" type="Teacher">
<id property="id" column="tid"/>
<result property="name" column="tname"/>
<!--如果是集合(包含关系)-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<!--学生的tid就是老师的id-->
<result property="tid" column="tid"/>
</collection>
</resultMap>
<!--Teacher里有个list集合,所以不能使用resultType,采用resultMap-->
<select id="getTeacher" resultMap="TeacherStudent">
select s.id sid,s.name sname,t.name tname,t.id tid
From student s,teacher t
WHERE s.tid=t.id and t.id=#{id}
</select>
</mapper>
(4) clases de prueba de escritura
package com.zz.mapper;
import com.zz.pojo.Teacher;
import com.zz.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class TeacherMapperTest {
@Test
public void testGetTeacher(){
SqlSession session = MyBatisUtils.getSession();
TeacherMapper mapper = session.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
}
}
El resultado:
Resumen:
- Asociación - asociación [] muchos a uno
- Colección - colección [muchos]
- Y OfType la javaType
la javaType utiliza para especificar el tipo de entidad atributo de clase
OfType utilizada para especificar el mapa para establecer el tipo de lista o POJO, en el tipo de restricción genérica!