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

多对一

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

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

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

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

 

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

 

实现过程:

1、javabean(同一对多)

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

 

2、dao  实现对应数据关系

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

/*实现接口:[src.dao.impl.GradeDaoImpl.java]*/
@Override
public List findAll() {
    ArrayList 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 studentList = gradeDao.findAll();
        for (Student student : studentList) {
            System.out.println(student.getStuName()+"\t"+student.getGrade().getGname());
        }
    }
}

 

你可能感兴趣的:(Java实现多表操作,其他)