Hibernate HQL多表查询
2024-08-24 23:07:18
1、内连接和迫切内连接
(1)内连接
HQL语句:from 实体类名 实体类别名 inner join 实体类别名.表示另一个表数据的集合名称
(2)迫切内连接
HQL语句:from 实体类名 实体类别名 inner join fetch 实体类别名.表示另一个表数据的集合名称
(3)区别:内连接返回的数据以数组的方式封装,迫切内连接返回的数据以对象的方式封装。
(4)代码:
内连接代码:
// 使用HQL内连接查询
@Test
public void test1() {
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<Object> 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迫切内连接查询
@Test
public void test2() {
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<Object> 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左外连接查询
@Test
public void test3() {
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<Object> 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迫切左外连接查询
@Test
public void test4() {
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<Object> 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右外连接查询
@Test
public void test5() {
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<Object> 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();
}
}
最新文章
- Spring实战 (第3版)——AOP
- 酷狗 KRC 文件的解析
- 自定义列表dl的使用原因和场合
- ASP.Net软件工程师基础(四)
- ubuntu常用快捷键
- HTML5游戏开发框架phaser学习日志(一)下载phaser,在IIS中配置phaser的examples站点
- 学习笔记---C++析构函数心得
- CoreText 实现图文混排
- 基于verilog的FPGA编程经验总结(XILINX ISE工具)
- $timeout, $interval
- Boost.Asio基础(三)
- 关于C#中函数声明带参数的函数
- Appnium-API-Execute Mobile Command
- IOC的理解,整合AOP,解耦对Service层和Dal层的依赖
- jvm 虚拟机内存模型
- CodeForces5E 环转链,dp思想
- ecilpse运行Servlet程序是找不到路径的原因
- WAS 默认端口列表
- shell打印彩色输出
- Linux shell 学习