1、内连接和迫切内连接
(1)内连接
HQL语句:from 实体类名 实体类别名 inner join 实体类别名.表示另一个表数据的集合名称
(2)迫切内连接
HQL语句:from 实体类名 实体类别名 inner join fetch 实体类别名.表示另一个表数据的集合名称
(3)区别:内连接返回的数据以数组的方式封装,迫切内连接返回的数据以对象的方式封装。
(4)代码:
内连接代码:
//使用HQL内连接查询
@Testpublic voidtest1() {
SessionFactory sessionFactory= null;
Session session= null;
Transaction tx= null;try{
sessionFactory=HibernateUtils.getFactory();
session=sessionFactory.openSession();
tx=session.beginTransaction();//1、创建Query对象,写hql语句
Query query = session.createQuery("from Sort s inner join s.setGoods");//调用list方法得到数据
List objects =query.list();//遍历list得到数组
for(Object object : objects) {
Object[] objects2=(Object[]) object;
System.out.println(Arrays.toString(objects2));
}
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
迫切内连接代码:
//使用HQL迫切内连接查询
@Testpublic voidtest2() {
SessionFactory sessionFactory= null;
Session session= null;
Transaction tx= null;try{
sessionFactory=HibernateUtils.getFactory();
session=sessionFactory.openSession();
tx=session.beginTransaction();//1、创建Query对象,写hql语句
Query query =session
.createQuery("from Sort s inner join fetch s.setGoods");//调用list方法得到数据
List objects =query.list();//遍历list得到数组
for(Object object : objects) {
System.out.println(object);
}
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
2、左外连接和迫切左外连接
(1)左外连接
HQL语句:from 实体类名 实体类别名 left outer join 实体类别名.表示另一个表数据的集合名称
(2)迫切左外连接
HQL语句:from 实体类名 实体类别名 left outer join fetch 实体类别名.表示另一个表数据的集合名称
(3)区别:左外连接返回的数据以数组的方式封装,迫切左外连接返回的数据以对象的方式封装。
(4)代码:
左外连接代码:
//使用HQL左外连接查询
@Testpublic voidtest3() {
SessionFactory sessionFactory= null;
Session session= null;
Transaction tx= null;try{
sessionFactory=HibernateUtils.getFactory();
session=sessionFactory.openSession();
tx=session.beginTransaction();//1、创建Query对象,写hql语句
Query query =session
.createQuery("from Sort s left outer join s.setGoods");//调用list方法得到数据
List objects =query.list();//遍历list得到数组//调用list方法得到数据//遍历list得到数组
for(Object object : objects) {
Object[] objects2=(Object[]) object;
System.out.println(Arrays.toString(objects2));
}
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
迫切左外连接代码:
//使用HQL迫切左外连接查询
@Testpublic voidtest4() {
SessionFactory sessionFactory= null;
Session session= null;
Transaction tx= null;try{
sessionFactory=HibernateUtils.getFactory();
session=sessionFactory.openSession();
tx=session.beginTransaction();//1、创建Query对象,写hql语句
Query query =session
.createQuery("from Sort s left outer join fetch s.setGoods");//调用list方法得到数据
List objects =query.list();for(Object object : objects) {
System.out.println(object);
}
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
3、右外连接
HQL语句:from 实体类名 实体类别名 right outer join 实体类别名.表示另一个表数据的集合名称
代码:
//使用HQL右外连接查询
@Testpublic voidtest5() {
SessionFactory sessionFactory= null;
Session session= null;
Transaction tx= null;try{
sessionFactory=HibernateUtils.getFactory();
session=sessionFactory.openSession();
tx=session.beginTransaction();//1、创建Query对象,写hql语句
Query query =session
.createQuery("from Sort s right outer join s.setGoods");//调用list方法得到数据
List objects =query.list();for(Object object : objects) {
Object[] objects2=(Object[]) object;
System.out.println(Arrays.toString(objects2));
}
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}