MyBatis (dos) - Muchos-a-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'); 

Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción

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:
Aquí Insertar imagen Descripción

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:
Aquí Insertar imagen Descripción
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!
Publicado 62 artículos originales · ganado elogios 2 · Vistas 2719

Supongo que te gusta

Origin blog.csdn.net/nzzynl95_/article/details/104432275
Recomendado
Clasificación