内连接:
查询出来的每一项为 object[]数组,左表存在object[0]中,右表存在object[1]中,object[0]和object[1]的关联关系有没有设置,取决于你的配置文件中,关联的配置时候lazy的值,如果lazy=false,则马上维护关系,lazy=true,先不维护关系,等用到关联关系维系的值时才查询。
迫切内连接
(不管设置lazy=true或者lazy=false,他关联关系立马就维护好了,且只发送一条sql语句,且结果集中的每条结果为 对象(本例中为部门对象,部门里面的员工已经填充好了)
左外连接:
在内连接的基础上,保证左表的数据不能丢失,如果左表中没有对应的右表数据,则右表对象置为空。lazy的设置导致的结果影响和内连接相同。
//通过query.iterate()方法优化性能:如果之前有过查询,则只通过主键从以前的缓存中获取数据,减少数据查询任务量
@org.junit.Test
public void iterateQE(){
session=HibernateUtil.getSession();
hql="from Emp";
List<Emp> elist=session.createQuery(hql).list();
for(Emp e:elist){
System.out.println(e.getEname());
}
System.out.println("-----------------------------");
String hql2="from Emp where empno<7600";
Iterator<Emp> eite=session.createQuery(hql2).iterate();
while(eite.hasNext()){
Emp e=eite.next();
System.out.println(e.getEname());
}
}
// 右外连接
@org.junit.Test
public void queryED333() {
session = HibernateUtil.getSession();
hql = "from Emp e right outer join e.dept";
Query query = session.createQuery(hql);
List<Object[]> objList = query.list();
for (Object[] objArr : objList) {
System.out.println((Emp) objArr[0] + ":"
+ ((Dept) objArr[1]).getDeptName());
}
}
// 迫切左外连接
public void queryED222() {
session = HibernateUtil.getSession();
hql = "select distinct d from Dept d left outer join fetch d.emps";
Query query = session.createQuery(hql);
List<Dept> dlist = query.list();
for (Dept d : dlist) {
System.out.print("部门:" + d.getDeptName());
for (Emp e : d.getEmps()) {
System.out.print(" " + e.getEname());
}
System.out.println();
}
HibernateUtil.closeSession();
}
// 隐式内连接查询
public void queryED111() {
session = HibernateUtil.getSession();
hql = "from Emp e where e.dept.deptName='SALES'";
Query query = session.createQuery(hql);
List<Emp> elist = query.list();
System.out.println(elist.size());
for (Emp e : elist) {
System.out.println("员工:" + e.getEname() + "部门:"
+ e.getDept().getDeptName());
}
HibernateUtil.closeSession();
}
// 迫切内连接查询
public void queryED11() {
session = HibernateUtil.getSession();
hql = "select distinct d from Dept d inner join fetch d.emps";
Query query = session.createQuery(hql);
List<Dept> dlist = query.list();
for (Dept d : dlist) {
System.out.print("部门: " + d.getDeptName());
for (Emp e : d.getEmps()) {
System.out.print(" | " + e.getEname());
}
System.out.println();
}
HibernateUtil.closeSession();
}
// 内连接查询(去重合并)
public void queryED2() {
session = HibernateUtil.getSession();
hql = "select distinct d from Dept d inner join fetch d.emps";
Query query = session.createQuery(hql);
List<Dept> objList = query.list();
for (Dept d : objList) {
System.out.print(d.getDeptName() + ": ");
for (Emp e : d.getEmps()) {
System.out.print(e.getEname() + " ");
}
System.out.println();
}
HibernateUtil.closeSession();
}
// 内连接查询
public void queryED1() {
session = HibernateUtil.getSession();
hql = "from Dept d inner join d.emps";
Query query = session.createQuery(hql);
List<Object[]> objList = query.list();
for (Object[] objArr : objList) {
System.out.println(objArr[0] + " " + objArr[1]);
}
HibernateUtil.closeSession();
}