1、等值连接:
/**
* 等值查询 查询出来的结构很差
*/
public List<Classes> queryClasses_Student_EQ(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c, Student s where c.cid=s.classes.cid").list();
session.close();
return cList;
}
2、内连接
/**
* 内连接 这种结构也不好
*/
public List<Classes> queryClasses_Student_INNER(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c inner join c.students").list();
session.close();
return cList;
}
3、迫切内连接:
/**
* 迫切内连接
*/
public List<Classes> queryClasses_Student_INNER_FETCH(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c inner join fetch c.students").list();
session.close();
return cList;
}
4、左外连接
/**
* 左外连接
*/
public List<Classes> queryClasses_Student_LeftJoin(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c left outer join c.students").list();
session.close();
return cList;
}
5、迫切左外连接
/**
* 迫切左外连接
*/
public List<Classes> queryClasses_Student_LeftJoin_fetch(){
Session session = sessionFactory.openSession();
String hql = "from Classes c left outer join fetch c.students";
hql = "from Student s left outer join fetch s.classes c";
List<Classes> cList = session.createQuery(hql).list();
session.close();
return cList;
}
6、如果页面只需要某个属性(cname, sname)使用以下方法
·创建 JavaBen(ClassesView.java)
public class ClassesView {
private String cname;
private String cname;
public ClassesView(String cname, String sname){
this.cname = cname;
this.sname = sname;
}
封装……
}
·在 HQLDao 中
public List<Classes> queryClasses_Student_Select(){
Session session = sessionFactory.openSession();
String hql = "select new cn.itcast.hiberate.sh.domain.ClassesView(c.cname,s.sname) " +
"from Student s left outer join s.classes c";
List<Classes> cList = session.createQuery(hql).list();
session.close();
return cList;
}
注意:因为“迫切连接”的结构和“带构造函数”的机构有冲突,所以两者只能取其一。
总结:
1、如果“页面上的数据”和“DB中的字段相差甚远”,利用带select 的构造器进行查询
2、如果页面上的数据和数据库中的字段相近,这是用迫切连接
3、如果采用“迫切链接”,from 后紧跟的就是结构主体。
4、如果多张表进行查询,找中间表。