一对多
1.正常取出所有的数据
2.只查询其中某几个栏目
以上查询方法获取的classesList并不是classes对象的集合,因为栏目对不上,缺少栏目。
所以如果想只查某几个栏目,需要在实体类中新建一个只有这几个栏目的构造函数。
注意:默认的空构造函数必须有。
HQL语句也要发生相应的变化。
即在hql语句中构造一个对象。这种写法称为投影查询。
3.一对多的等值连接
作用:查询出所有有学生的班级,并级联到一张表显示。
SQL语句就是:select c.*,s.* from Classes c,Student s where c.cid=s.cid;
而等值连接又相当于内连接,所以SQL语句又可以是:
select c.*,s.* from classes c inner join student s on(c.cid=s.cid);
所以HQL的另一种写法就是:
4.迫切内连接
就是在join后加个fetch
等值连接没有迫切的说法。
使用fetch可以来改善结构。
5.左外连接
作用:如:查询出所有班级,并将每个班级的学生查询出来,放在一张表中。
SQL语句:select c.*,s.* from classes c left outer join student s on(s.cid=c.cid);
内存映像:结构不好
6.迫切左外连接
结构很好
7.需求:从班级表(Classes)中查出cname,从学生表(Student)中查出sname,放入一张表显示。
解决方案:1.新建一个JavaBean如:ClassesView
带构造函数的Select语句和Fetch不能共存,只能有一个。
多对多
- 需求:根据班级找出所有学生并根据学生找出所有学生选的课程放入一张表中。