多对一【Java实现多表操作笔记二】

多对一

站在角度不一样 关系就不一样

原则:一方存多方的集合,多方存一方的对象

一对多 和多对一 的实体类是一样的:一方存多方的集合,多方存一方的对象

不一样的地方是 dao 实现对应关系的部分

 

实例:学生和年级关系:学生是多方,年级是一方

 

实现过程:

1、javabean(同一对多)

数据库中使用外键列保证两表关系,实体类中使用属性保证两表关系

 

2、dao  实现对应数据关系

/*接口:[src.dao.GradeDao.java(interface)]*/
public interface GradeDao {
    //查询学生的信息(包含年级信息)
    public List<Student> findAll();
}

/*实现接口:[src.dao.impl.GradeDaoImpl.java]*/
@Override
public List<Student> findAll() {
    ArrayList<Student> students = new ArrayList<>();
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    try {
        connection = getConnection();
        preparedStatement = connection.prepareStatement("select * from student s,grade g where s.gid=g.gradeid ");
        resultSet = preparedStatement.executeQuery();
        while(resultSet.next()){
            //1.各自存各自的数据
            Grade grade = new Grade();
            grade.setGradeId(resultSet.getInt("gradeid"));
            grade.setGname(resultSet.getString("gname"));

            Student student = new Student();
            student.setStuName(resultSet.getString("stuname"));
            student.setStuAge(resultSet.getInt("stuage"));
            //2.关联信息(将年级放在学生中,再将学生放在集合中)
            student.setGrade(grade);
            students.add(student);
        }
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    } finally {
        close(connection,preparedStatement,resultSet);
    }
    return students;
}

 

3、Demo2.java  测试关系

public class Demo2 {
    public static void main(String[] args) {
        GradeDaoImpl gradeDao = new GradeDaoImpl();
        //通过findAll()方法将两表信息整合
        List<Student> studentList = gradeDao.findAll();
        for (Student student : studentList) {
            System.out.println(student.getStuName()+"\t"+student.getGrade().getGname());
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值