mysql hql连表查询_Hibernate HQL多表查询

本文详细介绍了如何在Hibernate中使用HQL进行内连接、迫切内连接、左外连接、迫切左外连接和右外连接查询。通过示例代码展示了不同连接方式的查询语句和结果封装形式,帮助理解各种连接查询的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值