JDBC-多表操作之一对多

本文介绍了一对多关系在Java中的实现方式,通过Teacher和Student类展示了如何在一个Teacher类中存储多个Student对象。并提供了TeacherDao接口及其实现类TeacherDaoImpl来演示数据库操作,包括根据教师ID查询教师及其学生信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bean包

一方:Teacher类

package bean;

import java.util.List;

//一方
public class Teacher {

    private int tid;
    private String tname;
    //在一方创建存储多方数据的集合
    private List<Student> studentList;

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public List<Student> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<Student> studentList) {
        this.studentList = studentList;
    }
}

多方:Student类

package bean;

//多方
public class Student {

    private int stuId;
    private String stuName;
    private int teacherId;

    public int getStuId() {
        return stuId;
    }

    public void setStuId(int stuId) {
        this.stuId = stuId;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getTeacherId() {
        return teacherId;
    }

    public void setTeacherId(int teacherId) {
        this.teacherId = teacherId;
    }
}

dao包

TeacherDao接口

package dao;

import bean.Teacher;

public interface TeacherDao {
    //定义操作方法
    //1.定义一个根据老师id查询老师信息(学生的信息)
    public Teacher getById(int tid);
}

TeacherDaoImpl类

package dao.impl;

import bean.Student;
import bean.Teacher;
import dao.TeacherDao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class TeacherDaoImpl implements TeacherDao {

    @Override
    public Teacher getById(int tid) {
        //操作数据库
        Connection connection = null;
        PreparedStatement pps = null;
        ResultSet resultSet = null;


        try {
            //1.加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获得链接
            String userName = "root";
            String password = "root";
            String url = "jdbc:mysql://localhost:3306/yhp3?serverTimezone=UTC";
            connection = DriverManager.getConnection(url,userName,password);


            //3.定义sql,创建   预    状态通道(进行sql语句的发送)
            String sql = "select * from student s,teacher t where s.teacherid = t.tid and t.tid = ?";    //? 英文符号,用来表示占位
            pps  = connection.prepareStatement(sql);

            //给占位符赋值    括号里面跟(下标,数值)        下标从1开始
            pps.setInt(1,tid);//根据表中数据给setXxx()

            //执行sql
            resultSet = pps.executeQuery(); //executeQuery(sql)执行增删改时使用

            //集合存这个泛型
            List<Student>  students = new ArrayList<>();

            Teacher teacher = new Teacher();
            while(resultSet.next()){
                //1.取出各自的信息
                teacher.setTid(resultSet.getInt("tid"));
                teacher.setTname(resultSet.getString("tname"));

                Student student = new Student();
                student.setStuId((resultSet.getInt("stuid")));
                student.setStuName(resultSet.getString("stuname"));
                //2.建立学生和老师之间的关系
                students.add(student);
            }
            teacher.setStudentList(students);
            return teacher;


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            try {


                //5.关闭资源
                if (resultSet != null) {
                    resultSet.close();
                }
                if (pps != null) {
                    pps.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }


            return null;
        }
    }
}

test包

package test;

import bean.Student;
import bean.Teacher;
import dao.TeacherDao;
import dao.impl.TeacherDaoImpl;

import java.util.List;

public class Demo1 {
    public static void main(String[] args) {

        TeacherDao dao = new TeacherDaoImpl();
        Teacher teacher = dao.getById(1);
        System.out.println("老师姓名:"+teacher.getTname());
        List<Student> studentList = teacher.getStudentList();
        for(Student student : studentList){
            System.out.println("\t studentname=" +student.getStuName());
        }

    }
}

依据图

学生信息
在这里插入图片描述
老师信息
在这里插入图片描述

一对多
在这里插入图片描述

控制台执行结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值