MyBatis framework 03 réalise la requête associée

1. Créez une table de base de données
(1) Créez une table d'enseignant
Exécutez des instructions SQL pour créer une table d'enseignant t_teacher

CREATE TABLE `t_teacher` (
`t_id` int(11) NOT NULL AUTO_INCREMENT,
`t_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

Insérez la description de l'image ici

(2) Créer une
table Student Exécuter une instruction SQL pour créer une table Student t_student

CREATE TABLE `t_student` (
  `s_id` int(11) NOT NULL AUTO_INCREMENT,
  `s_name` varchar(30) DEFAULT NULL,
  `s_gender` varchar(10) DEFAULT NULL,
  `s_age` int(9) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`s_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `t_student` VALUES('1','佟大为','男','20','1');
INSERT INTO `t_student` VALUES('2','李芳玉','女','20','1');
INSERT INTO `t_student` VALUES('3','郑大林','男','19','2');
INSERT INTO `t_student` VALUES('4','温晓辉','男','22','1');
INSERT INTO `t_student` VALUES('5','吴文静','女','18','2');
INSERT INTO `t_student` VALUES('6','肖文艳','女','20','3');
INSERT INTO `t_student` VALUES('7','杨文军','男','23','3');
INSERT INTO `t_student` VALUES('8','唐雨涵','女','20','2');
INSERT INTO `t_student` VALUES('','金雨欣','女','20','2');
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210310151909149.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RyaWV0,size_16,color_FFFFFF,t_70)

Insérez la description de l'image ici

(3) Créer une table de classe
Exécuter une instruction SQL, créer une table de classe t_class

CREATE TABLE `t_class` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_name` varchar(20) DEFAULT NULL,
  `teacher_id` int(11) DEFAULT NULL,
PRIMARY KEY (`c_id`),
KEY `fk_teacher_id` (`teacher_id`),
CONSTRAINT `fk_teacher_id` FOREIGN KEY (`teacher_id`) REFERENCES `t_teacher` (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `t_class` VALUES ('1', '2020软件1班', '3');
INSERT INTO `t_class` VALUES ('2', '2020软件2班', '2');
INSERT INTO `t_class` VALUES ('3', '2020软件3班', '1');

Insérez la description de l'image ici
2. Créez une classe d'entité correspondant à la table de base de données
(1) Créez une classe d'entité enseignant
Insérez la description de l'image ici

package net.tjl.mybatis.bean;
/**
 * 功能:教师实体类
 * 作者:谭金兰
 * 日期:2021年03月10日
 */

public class Teacher {
    
    
    private int id;
    private String name;

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    @Override
    public String toString() {
    
    
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

(2) Créer une classe d'entité étudiante
Insérez la description de l'image ici

package net.tjl.mybatis.bean;
/**
 * 功能:学生实体类
 * 作者:谭金兰
 * 日期:2021年03月10日
 */

public class Student {
    
    
    private int id;
    private String name;
    private String gender;
    private int age;
    private Clazz clazz;

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getGender() {
    
    
        return gender;
    }

    public void setGender(String gender) {
    
    
        this.gender = gender;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    public Clazz getClazz() {
    
    
        return clazz;
    }

    public void setClazz(Clazz clazz) {
    
    
        this.clazz = clazz;
    }

    @Override
    public String toString() {
    
    
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                ", clazz=" + clazz.getName() +
                '}';
    }
}


(3) Créer une classe d'entité de classe
Insérez la description de l'image ici

package net.tjl.mybatis.bean;
/**
 * 功能:
 * 作者:谭金兰
 * 日期:2021年03月10日
 */

import java.util.List;

public class Clazz {
    
    
    private int id;
    private String name;
    private Teacher teacher;
    private List<Student> students;

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public Teacher getTeacher() {
    
    
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
    
    
        this.teacher = teacher;
    }

    public List<Student> getStudents() {
    
    
        return students;
    }

    public void setStudents(List<Student> students) {
    
    
        this.students = students;
    }

    @Override
    public String toString() {
    
    
        return "Clazz{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", teacher=" + teacher.getName() +
                ", students=" + students +
                '}';
    }
}

Troisièmement, créez un fichier de configuration de mappeur de classe
Insérez la description de l'image ici

<?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="net.tjl.mybatis.mapper.ClazzMapper">
    <!--三表关联查询-->
    <select id="findById" parameterType="int" resultMap="clazzResultMap">
        SELECT * FROM t_teacher INNER JOIN t_class ON t_class.teacher_id = t_teacher.t_id
        INNER JOIN t_student ON t_class.c_id = t_student.class_id WHERE c_id = #{
    
    id};
    </select>

    <!--定义班级结果映射-->
    <resultMap id="clazzResultMap" type="Clazz">
        <result property="id" column="c_id"/>
        <result property="name" column="c_name"/>
        <!--一对一-->
        <association property="teacher" column="teacher_id" javaType="Teacher">
            <result property="id" column="t_id"/>
            <result property="name" column="t_name"/>
        </association>
        <!--一对多-->
        <collection property="students" ofType="Student">
            <result property="id" column="s_id"/>
            <result property="name" column="s_name"/>
            <result property="gender" column="s_gender"/>
            <result property="age" column="s_age"/>
            <association property="clazz" column="class_id" javaType="Clazz">
                <result property="name" column="c_name"/>
            </association>
        </collection>
    </resultMap>



    <!--通过嵌套查询实现一对一关联-->
    <select id="findAll" resultMap="clazzResultMap2">
        SELECT * FROM t_class;
    </select>

    <!--定义班级结果映射-->
    <resultMap id="clazzResultMap2" type="Clazz">
        <result property="id" column="c_id"/>
        <result property="name" column="c_name"/>
        <association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher"/>
    </resultMap>

    <select id="getTeacher" resultType="Teacher">
       SELECT t_id id, t_name name FROM t_teacher WHERE t_id = #{
    
    id};
    </select>
</mapper>

4. Modifiez le fichier de configuration MyBatis
. Configurez les noms des catégories d'entités de classe, d'enseignant et d'élève dans la configuration, ainsi que le fichier de configuration du mappeur de classe.
Insérez la description de l'image ici
Insérez la description de l'image ici
5. Définissez l'interface de mappage de classe ClazzMapper
Insérez la description de l'image ici

package net.tjl.mybatis.mapper;


import net.tjl.mybatis.bean.Clazz;

import java.util.List;

public interface ClazzMapper {
    
    
    Clazz findById(int id);
    List<Clazz>findAll();
}

Six, créez une classe de test TestClazzMapper
Insérez la description de l'image ici

package net.tjl.mapper;

import net.tjl.mybatis.bean.Clazz;
import net.tjl.mybatis.bean.Student;
import net.tjl.mybatis.mapper.ClazzMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

/**
 * 功能:测试班级映射器接口
 * 作者:谭金兰
 * 日期:2021年03月10日
 */
public class TestClazzMapper {
    
    

    private SqlSession sqlSession; // SQL会话
    private ClazzMapper clazzMapper; // 班级映射器

    @Before
    public void init() {
    
    
        try {
    
    
            // 读取MyBatis配置文件作为字符输入流
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 基于MyBatis配置文件构建SQL会话工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
            // 利用SQL会话工厂获取SQL会话
            sqlSession = factory.openSession();
            // 利用SQL会话获取班级映射器对象
            clazzMapper = sqlSession.getMapper(ClazzMapper.class);
            System.out.println("sqlSession对象已创建");
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    @Test
    public void testFindById() {
    
    
        int id = 1;
        Clazz clazz = clazzMapper.findById(id);
        System.out.println(clazz);

        System.out.println("班级编号[" + id + "]的学生:");
        List<Student> students = clazz.getStudents();
        students.forEach(student -> System.out.println(student));
    }

    @Test
    public void testFindAll() {
    
    
        List<Clazz> clazzes = clazzMapper.findAll();
        clazzes.forEach(clazz -> System.out.println(clazz));
    }

    @After
    public void destroy() {
    
    
        // 关闭SQL会话
        sqlSession.close();
        //提示用户SQL会话对象关闭
        System.out.println("sqlSession对象已关闭");
    }
}

(1) Exécutez la méthode de test testFindById () pour afficher les résultats
Insérez la description de l'image ici
(2) Exécutez la méthode de test testFindAll () pour afficher les résultats
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/triet/article/details/114635836
conseillé
Classement