Hibernate共提供4种多表关联数据查询方式
  OID数据查询+OGN数据查询方式
  HQL数据查询方式
  QBC数据查询方式
  本地SQL查询方式(hibernate很少用)

1、OID数据查询+OGN数据查询方式

 public class TestOID_OGN {

     /**
* 什么时候时候什么时候发送
*/
@Test
public void findUser() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction();
//小李子
User user = (User) session.get(User.class, "ff80808157c82de80157c82deb3c0001");
System.out.println("========="); System.out.println(user);
ts.commit();
session.close();
}
}

2、HQL数据查询方式

/**
* HQL 数据查询
*/
public class TestHQL { @Test
public void findUser() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); String hql = "from User";
Query query = session.createQuery(hql);
@SuppressWarnings("unchecked")
List<User> users = query.list();
for (User user : users) {
System.out.println("=="+user);
} ts.commit();
session.close();
} @Test
public void findUser1() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //项目部中的所有 员工详细信息 String hql = "from Dept where deptname = '人事部'";
Query query = session.createQuery(hql);
Dept dept = (Dept) query.uniqueResult(); //OGN
Set<User> list = dept.getUsers();
for (User user : list) {
System.out.println(user);
} ts.commit();
session.close();
} @Test
public void findUser2() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //项目部中的所有 员工详细信息
//PO
//Dept dept = (Dept) session.get(Dept.class,"ff80808157c831050157c83106c40001"); //DO
Dept dept = new Dept();
dept.setDeptId("ff80808157c831050157c83106c40001"); //以对象作为条件查询:根据对象id
//只要保证该对象具备:OID PO DO String hql = "from User where dept = ? ";
Query query = session.createQuery(hql);
query.setEntity(0, dept);
//什么类型都可以只使用
//query.setParameter(0, dept); @SuppressWarnings("unchecked")
List<User> list = (List<User>) query.list();
System.out.println("=================");
for (User user : list) {
System.out.println("=="+user);
} ts.commit();
session.close();
}
}

3、QBC数据查询方式

 public class TestQBC {

     @Test
public void findUser() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("username", "小小")); User user = (User) criteria.uniqueResult();
//session.clear();
System.out.println("=========");
System.out.println(user.getDept()); ts.commit();
session.close();
} @Test
public void findUser1() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); Dept dept = new Dept();
dept.setDeptId("ff80808157c831050157c83106c40001"); Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("dept", dept)); @SuppressWarnings("unchecked")
List<User> list = criteria.list();
System.out.println("=========分割线===========");
for (User user : list) {
System.out.println(user);
} ts.commit();
session.close();
} @Test
public void findUser2() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); Dept dept = (Dept) session.get(Dept.class, "ff80808157c831050157c83106c40001"); //from User dept.deptId = '4028408157c14c210157c14c25370000'
Criteria criteria = session.createCriteria(User.class);
//使用OGN:OID
criteria.add(Restrictions.eq("dept.deptId", dept.getDeptId())); System.out.println("==========分割线============");
@SuppressWarnings("unchecked")
List<User> list = criteria.list();
for (User user : list) {
System.out.println(user);
} ts.commit();
session.close();
} @Test
public void findUser3() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); Dept dept = (Dept) session.get(Dept.class, "ff80808157c831050157c83106c40001"); //from User dept.deptName = '项目部'
Criteria criteria = session.createCriteria(User.class);
//QBC:ONG方式中如果使用的的OID可以查询,但是如果使用的是除OID之外的其它属性
//就会报异常,解决方案:createAlias("dept")
//为dept起别名
criteria.createAlias("dept", "dept");
criteria.add(Restrictions.eq("dept.deptName", dept.getDeptName())); @SuppressWarnings("unchecked")
List<User> list = criteria.list();
System.out.println("==========分割线===========");
for (User user : list) {
System.out.println(user);
} ts.commit();
session.close();
}
}

4、HQL数据查询方式(测试内连接,外连接查询)

 /**
* @author nunu
* 测试内连接,外连接查询
*/
public class TestHQL2 { /**
* 内连接:
* 有关联数据:
* 数据总量:从表被关联的数据总量
* 数据模型:主表数据(延迟从) + 从表数据(含主)
*
*/
@Test
public void findUser() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //部门:主表
//员工:从表
//sql:select d.*,u.* from t_dept d inner join t_user u on d.dept_id = u.dept_id;
String hql = "from Dept d inner join d.users";
Query query = session.createQuery(hql); @SuppressWarnings("unchecked")
List<Object[]> list = query.list();
System.out.println(list.size()); System.out.println("==========分割线===========");
for (int i = 0; i < list.size(); i++) {
Object[] objs = list.get(i);
//主表数据
Dept dept = (Dept) objs[0];
User user = (User) objs[1];
System.out.println(user);
System.out.println(dept);
/*
//主表关联数据
Set<User> userSet = dept.getUsers();
for (User user : userSet) {
//如果延迟加载:回发送新语句查询
System.out.println(user);
}
*/
System.out.println("==");
/*
//从表数据
User user = (User) objs[1]; //从表关联数据
Dept dept = user.getDept(); System.out.println(dept);
*/
} ts.commit();
session.close();
} /**
* 迫切内连接(数据重复DISTINCT)
* 数据总量:从表被关联的数据总量
* 数据模型:主表数据 (含从)
*/
@Test
public void findUser1() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //部门:主表
//员工:从表
//sql:select d.*,u.* from t_dept d inner join t_user u on d.dept_id = u.dept_id;
String hql = "from Dept d inner join fetch d.users";
Query query = session.createQuery(hql);
@SuppressWarnings("unchecked")
List<Dept> list = query.list();
System.out.println(list.size());
System.out.println("===============分隔符=================");
session.clear();
for (Dept dept : list) {
Set<User> users = dept.getUsers();
for (User user : users) {
System.out.println(user);
}
System.out.println("---------");
} ts.commit();
session.close();
} /**
* 隐式内连接
* 数据总量:主表数据总量
* 数据模型:主表数据(延迟从)
*/
@Test
public void findUser2() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //部门:主表
//员工:从表
//sql:select d.*,u.* from t_dept d inner join t_user u on d.dept_id = u.dept_id;
String hql = "from Dept"; //默认就会用户关联了
Query query = session.createQuery(hql);
@SuppressWarnings("unchecked")
List<Dept> list = query.list();
System.out.println(list.size());
//session.clear();
System.out.println("===============分隔符=================");
for (Dept dept : list) {
Set<User> users = dept.getUsers();
for (User user : users) {
System.out.println(user);
}
System.out.println("-----------------");
} ts.commit();
session.close();
} /**
左外连接: 以左侧表为准
数据总量:从表被关联数据总量+主表未关联数据总量
数据模型:主表数据(延迟从) ,从表数据 (含主)
(主表不存在关联数据的从表数据为0)
*/
@Test
public void findUser3() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //部门:主表
//员工:从表
//sql:select d.*,u.* from t_dept d inner join t_user u on d.dept_id = u.dept_id;
String hql = "from Dept d left outer join d.users";//默认就会用户关联了
Query query = session.createQuery(hql); @SuppressWarnings("unchecked")
List<Object[]> list = query.list();
System.out.println(list.size()); System.out.println("============分隔符==============");
for (int i = 0; i < list.size(); i++) {
Object[] objs = list.get(i);
//主表数据
System.out.println("\t ==主表数据");
Dept dept = (Dept) objs[0];
System.out.println("\t "+dept); System.out.println("\t ==主表关联数据");
//主表关联数据
Set<User> userSet = dept.getUsers();
for (User user : userSet) {
//如果延迟加载:回发送新语句查询
System.out.println("\t "+user);
} System.out.println("\t ==从表数据");
//从表数据
User user = (User) objs[1];
System.out.println("\t "+user); System.out.println("\t ==从表关联数据");
//从表关联数据
Dept dept1 = user.getDept(); System.out.println("\t "+dept1);
System.out.println("-------------");
}
ts.commit();
session.close();
} /**
* 迫切左外连接(数据重复DISTINCT)
数据总量:从表被关联数据总量+主表未关联数据总量
数据模型:主表数据(含从)
(主表不存在关联数据的从表数据为0)
*/
@Test
public void findUser4() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //部门:主表
//员工:从表
//sql:select d.*,u.* from t_dept d inner join t_user u on d.dept_id = u.dept_id;
String hql = "from Dept d left outer join fetch d.users";//默认就会用户关联了
Query query = session.createQuery(hql); @SuppressWarnings("unchecked")
List<Dept> list = query.list();
System.out.println("============分隔符==============");
for (Dept dept : list) {
System.out.println(dept); Set<User> userSet = dept.getUsers();
for (User user : userSet) {
System.out.println(user);
}
System.out.println("-----------");
}
ts.commit();
session.close();
} /**
* 右外连接:
数据总量:从表数据总量
数据模型:主表数据(延迟从) ,从表数据(含主)
(从表不存在关联数据的主表数据为null)
*/
@Test
public void findUser5() {
SessionFactory sf = H3Util.getSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction(); //部门:主表
//员工:从表
//sql:select d.*,u.* from t_dept d inner join t_user u on d.dept_id = u.dept_id;
String hql = "from Dept d right outer join d.users";//默认就会用户关联了
Query query = session.createQuery(hql); @SuppressWarnings("unchecked")
List<Object[]> list = query.list();
System.out.println(list.size());
System.out.println("=============分隔符=================");
for (int i = 0; i < list.size(); i++) {
Object[] objs = list.get(i);
//主表数据
//Dept dept = (Dept) objs[0];
//System.out.println(dept.getDeptName()); //主表关联数据
/*Set<User> userSet = dept.getUsers();
for (User user : userSet) {
//如果延迟加载:回发送新语句查询
System.out.println(user.getUserId());
}*/ //从表数据
User user = (User) objs[1];
System.out.println(user); //从表关联数据
// Dept dept = user.getDept();
// System.out.println(dept.getDeptName());
// System.out.println(user.getUsername());
System.out.println("-------------");
}
ts.commit();
session.close();
ts.commit();
session.close();
} }

hibernate的基础学习--多表关联数据查询的更多相关文章

  1. hibernate的基础学习--多对多关联

    多对多采用学生老师模型进行测试 学生配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DOCTY ...

  2. hibernate的基础学习--一对多关联

    基本的用户和部门类,只有uuid和名称,没有其余字段. 配置文件 部门: <?xml version="1.0" encoding="utf-8" ?&g ...

  3. EF里单个实体的增查改删以及主从表关联数据的各种增删 改查

    本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...

  4. MagicalRecord 多表关联数据操作

    最近在使用MagicalRecord做数据持久层CoreData的操作库,今天做了一个多表关联数据的操作,整理了一个demo,特此记录一下. 关于如何使用Cocopads 和 MagicalRecor ...

  5. bootstrap基础学习【表单含按钮】(二)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. C# - VS2019 WinFrm应用程序连接Access数据库,并简单实现数据库表的数据查询、显示

    序言 众所周知,Oracle数据库和MySQL数据库一般在大型项目中使用,在某些小型项目中Access数据库使用较为方便,今天记录一下VS2019 WinFrm应用程序连接Access数据库,并实现数 ...

  7. MySQL多表关联数据同时删除

    MySQL多表关联时的多表删除: DELETE t1, t2FROM    t1LEFT JOIN t2 ON t1.id = t2.idWHERE    t1.id = 25

  8. oracle解决多表关联分组查询问题

    做了一个功能需要分组查询,同时查询A表分组查询的ID需要关联B表的数据,本来想两个表关联查询,但是报group by 语法不正确.所以做了以下修改. select count(*), cindexid ...

  9. MySQL数据库基础(4)SELECT 数据查询

    目录 一.SELECT 选择列表 二.MySQL 运算符 三.定制显示查询结果 四.模糊查询 一.SELECT 选择列表 1.语法 SELECT <COLUMN1, COLUMN2, COLUM ...

随机推荐

  1. Base64的空格 + 问题...

    BASE64  通过url传递到后台 加号变空格的处理方法 解决方法: 前台处理:str.replace("+", "%2B"); (错误) <scrip ...

  2. kafka-0.8.1.1总结

    文件夹 一.         基础篇 1.     开篇说明 2.     概念说明 3.     配置说明 4.     znode分类 5.     kafka协议分类 6.     Kafka线 ...

  3. 在chrome中屏蔽百度推荐

    在chrome中屏蔽百度推荐 方法1:可以使用adblock plus来进行屏蔽: 需要将chrome的扩展程序打开为调试者模式: 下载地址:http://chromecj.com/productiv ...

  4. PS 图层后面有索引两字怎么办

    ps中图层后面有索引两字的怎么把它拖进别的图中?或怎么把索引去掉? 悬赏分:0 | 解决时间:2010-11-5 08:58 | 提问者:jk500pk 最佳答案 图像--模式 把索引颜色模式改成RG ...

  5. ok6410[000] 搭建裸机开发环境

    1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...

  6. jsp获取sina天气

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. React Native安装

    1.安装 1.1 安装Node.js 下载安装即可 1.2 安装Homebrew 终端中执行: $ /usr/bin/ruby -e "$(curl -fsSL https://raw.gi ...

  8. (白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)

    题目地址:UVa 11572 这样的方法曾经接触过,定义两个指针,不断从左向右滑动,推断指针内的是否符合要求. 这个题为了能高速推断是否有这个数,能够用STL中的set. 代码例如以下: #inclu ...

  9. log Configuration

    Log4j – Configuring Log4j 2 - Apache Log4j 2 https://logging.apache.org/log4j/2.x/manual/configurati ...

  10. Eclipse设置java环境

    通用JRE环境设置: Window->Preferences->Java->Installed JREs 设置jre路径,如C:\Program Files\Java\jre1.8. ...