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. Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 建立一个文件夹filePackage 在filePackage 文件夹内创建 __init__.py 有了 __init__.py ,filePackage才算是 ...

  3. [React] Create and import React components with Markdown using MDXC

    In this lesson I demonstrate how to use the library MDXC to create and import React components with ...

  4. Dos 改动IP 地址

    1.改动 ip地址 子网掩码 默认网关 netsh interface ip set address "本地连接" static 192.168.1.23 255.255.255. ...

  5. Cocoa root class

    问题来源: 常见面试问题之: NSObject和NSObject protocol有什么区别,为什么要有NSObject protocol, 有没有不继承自NSObject的类? 虽然在iOS开发过程 ...

  6. 2016-1-8 windows 7下安装mysql及其配置和运用

    绪言 最近学习了一下mysql的相关用法,以及vs2010结合mysql的使用. 遇到的问题:1.安装mysql 5.6 绿色免安装版本,出现mysql server not connect loca ...

  7. ScaleYViewPager

    https://github.com/eltld/ScaleYViewPager

  8. 如何在外部采用AES-128对HLS的TS流进行加密

    http://www.wowza.cn/hls/howToSecureHlsByAes128External

  9. 1507: [NOI2003]Editor

    1507: [NOI2003]Editor Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 3535  Solved: 1435 [Submit][St ...

  10. 小程序 单页应用的 tab切换 实现

    小程序 单页应用的  tab切换 实现