1.创建如下javaweb项目结构

2.在项目的src下创建hibernate.cfg.xml主配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/entity/Dept.hbm.xml"/>
<mapping resource="com/entity/Emp.hbm.xml"/>
</session-factory>
</hibernate-configuration>

hibernate.cfg.xml

3.在项目的src下的com.util包下创建HibernateUtil.java

 package com.util;

 import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static ThreadLocal<Session> thread=new ThreadLocal<Session>();
private static Configuration config=null;
private static SessionFactory factory=null;
/**
* 读取配置文件
*/
static{
try {
config=new Configuration().configure("/hibernate.cfg.xml");
factory=config.buildSessionFactory();
} catch (HibernateException e) {
System.out.println("读取配置文件失败或创建factory失败");
e.printStackTrace();
}
}
/**
* 打开session
* @return
*/
public static Session getSession(){
Session session =thread.get();
if(session==null){
session=factory.openSession();
thread.set(session);
}
return session;
}
/**
* 关闭session
*/
public static void closeSession(){
Session session =thread.get();
thread.set(null);
session.close(); } }

HibernateUtil.java

4.在项目的src下的com.entity包下创建Dept.java

 package com.entity;

 import java.util.HashSet;
import java.util.Set; public class Dept {
private Integer deptno;
private String dname;
private String loc;
private Set<Emp> emps =new HashSet<Emp>(); public Dept() {
} public Dept(Integer deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
} public Dept(Integer deptno, String dname, String loc, Set<Emp> emps) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
this.emps = emps;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public Set<Emp> getEmps() {
return emps;
}
public void setEmps(Set<Emp> emps) {
this.emps = emps;
} @Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
} }

Dept.java

5.在项目的src下的com.entity包下创建Emp.java

 package com.entity;

 public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer sal;
private Dept dept; public Emp() {
} public Emp(Integer empno, String ename, String job, Integer sal) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.sal = sal;
} public Emp(Integer empno, String ename, String job, Integer sal, Dept dept) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.sal = sal;
this.dept = dept;
} public Integer getEmpno() {
return empno;
} public void setEmpno(Integer empno) {
this.empno = empno;
} public String getEname() {
return ename;
} public void setEname(String ename) {
this.ename = ename;
} public String getJob() {
return job;
} public void setJob(String job) {
this.job = job;
} public Integer getSal() {
return sal;
} public void setSal(Integer sal) {
this.sal = sal;
} public Dept getDept() {
return dept;
} public void setDept(Dept dept) {
this.dept = dept;
} @Override
public String toString() {
return "Emp [ empno=" + empno + ", ename=" + ename
+ ", job=" + job + ", sal=" + sal + "]";
} }

Emp.java

6.在项目的src下的com.entity包下创建Dept.hbm.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.entity.Dept" table="DEPT">
<id name="deptno" type="java.lang.Integer" column="DEPTNO">
<generator class="assigned"/>
</id>
<property name="dname" type="java.lang.String" column="DNAME"/>
<property name="loc" type="java.lang.String" column="LOC"/>
<!-- 一对多 -->
<set name="emps" inverse="true" cascade="save-update">
<key column="DEPTNO"></key>
<one-to-many class="com.entity.Emp"/>
</set>
</class>
</hibernate-mapping>

Dept.hbm.xml

7.在项目的src下的com.entity包下创建Emp.hbm.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.entity.Emp" table="EMP">
<id name="empno" type="java.lang.Integer" column="EMPNO">
<generator class="assigned"/>
</id>
<property name="ename" type="java.lang.String" column="ENAME"/>
<property name="job" type="java.lang.String" column="JOB"/>
<property name="sal" type="java.lang.Integer" column="SAL"/>
<!-- 多对一 -->
<many-to-one name="dept" class="com.entity.Dept" column="DEPTNO"/>
</class>
</hibernate-mapping>

Emp.hbm.xml

8.在项目的src下的com.dao包下创建DpetDao.java

 package com.dao;

 import java.util.List;

 import org.hibernate.Query;
import org.hibernate.Session; import com.entity.Dept;
import com.util.HibernateUtil; public class DpetDao { public static void main(String[] args) {
System.out.println("-----------1.关联查询-----------");
//getDept();
System.out.println("-------2.内连接-------");
innerJoin();
System.out.println("-------3.迫切内连接-------");
innerJoinFetch();
System.out.println("-------4.左连接-------");
leftJoin();
System.out.println("-------5.迫切左连接-------");
leftJoinFetch();
System.out.println("-------6.右连接-------");
rightJoin(); }
/**
* 6.右连接
*/
private static void rightJoin() {
Session session=HibernateUtil.getSession();
String hql="from Dept d right join d.emps ";
Query query=session.createQuery(hql);
/*list集合中的每个元素都是一个Object数组,数组的第一个元素时Dept对象,
* 第二个元素时Emp对象,Dept对象的emps集合元素没有被初始化,
* 即emps集合没有存放关联的Emp对象*/
List<Object[]> list=query.list();
System.out.println("dept对象"+"~~"+"emp对象");
for (Object[] obj : list) {
System.out.println(obj[0]);
System.out.println(obj[1]);
}
HibernateUtil.closeSession(); }
/**
* 5.迫切左连接
*/
private static void leftJoinFetch() {
Session session=HibernateUtil.getSession();
/*Hibernate使用fetch关键字实现了将Emp对象读取出来后立即填充到对应的Dept对象
* 的集合属性中,*/
String hql="select distinct d from Dept d left join fetch d.emps ";
Query query=session.createQuery(hql);
List<Dept> list=query.list();
for (Dept dept : list) {
System.out.println(dept);
}
HibernateUtil.closeSession();
}
/**
* 4.左连接
*/
private static void leftJoin() {
Session session=HibernateUtil.getSession();
String hql="from Dept d left join d.emps ";
Query query=session.createQuery(hql);
/*list集合中的每个元素都是一个Object数组,数组的第一个元素时Dept对象,
* 第二个元素时Emp对象,Dept对象的emps集合元素没有被初始化,
* 即emps集合没有存放关联的Emp对象*/
List<Object[]> list=query.list();
System.out.println("dept对象"+"~~"+"emp对象");
for (Object[] obj : list) {
System.out.println(obj[0]);
System.out.println(obj[1]);
}
HibernateUtil.closeSession();
}
/**
* 3.迫切内连接
*/
private static void innerJoinFetch() {
Session session=HibernateUtil.getSession();
/*Hibernate使用fetch关键字实现了将Emp对象读取出来后立即填充到对应的Dept对象
* 的集合属性中,*/
String hql="select distinct d from Dept d inner join fetch d.emps ";
Query query=session.createQuery(hql);
List<Dept> list=query.list();
for (Dept dept : list) {
System.out.println(dept);
}
HibernateUtil.closeSession();
}
/**
* 2.内连接
*/
private static void innerJoin() {
Session session=HibernateUtil.getSession();
String hql="from Dept d inner join d.emps ";
Query query=session.createQuery(hql);
/*list集合中的每个元素都是一个Object数组,数组的第一个元素时Dept对象,
* 第二个元素时Emp对象,Dept对象的emps集合元素没有被初始化,
* 即emps集合没有存放关联的Emp对象*/
List<Object[]> list=query.list();
System.out.println("dept对象"+"~~"+"emp对象");
for (Object[] obj : list) {
System.out.println(obj[0]);
System.out.println(obj[1]);
}
HibernateUtil.closeSession();
}
/**
* Exception in thread "main" java.lang.StackOverflowError
* 内存溢出:死循环
* hiberante双向关联时:打印内容时不能你中有我,我中有你,查询默认是懒加载
*
*/
private static void getDept() {
Session session=HibernateUtil.getSession();
String hql="from Dept";
Query query=session.createQuery(hql);
List<Dept> list=query.list();
for (Dept dept : list) {
System.out.println(dept);
System.out.println(dept.getEmps());
}
HibernateUtil.closeSession(); } }

DpetDao.java

9.运行结果如下:remdeme.txt

 1.内连接
Hibernate:
select
dept0_.DEPTNO as DEPTNO0_0_,
emps1_.EMPNO as EMPNO1_1_,
dept0_.DNAME as DNAME0_0_,
dept0_.LOC as LOC0_0_,
emps1_.ENAME as ENAME1_1_,
emps1_.JOB as JOB1_1_,
emps1_.SAL as SAL1_1_,
emps1_.DEPTNO as DEPTNO1_1_
from
DEPT dept0_
inner join
EMP emps1_
on dept0_.DEPTNO=emps1_.DEPTNO
2.迫切内连接
select
dept0_.DEPTNO as DEPTNO0_0_,
emps1_.EMPNO as EMPNO1_1_,
dept0_.DNAME as DNAME0_0_,
dept0_.LOC as LOC0_0_,
emps1_.ENAME as ENAME1_1_,
emps1_.JOB as JOB1_1_,
emps1_.SAL as SAL1_1_,
emps1_.DEPTNO as DEPTNO1_1_,
emps1_.DEPTNO as DEPTNO0__,
emps1_.EMPNO as EMPNO0__
from
DEPT dept0_
inner join
EMP emps1_
on dept0_.DEPTNO=emps1_.DEPTNO
-------4.左连接-------
Hibernate:
select
dept0_.DEPTNO as DEPTNO0_0_,
emps1_.EMPNO as EMPNO1_1_,
dept0_.DNAME as DNAME0_0_,
dept0_.LOC as LOC0_0_,
emps1_.ENAME as ENAME1_1_,
emps1_.JOB as JOB1_1_,
emps1_.SAL as SAL1_1_,
emps1_.DEPTNO as DEPTNO1_1_
from
DEPT dept0_
left outer join
EMP emps1_
on dept0_.DEPTNO=emps1_.DEPTNO -------5.迫切左连接-------
Hibernate:
select
distinct dept0_.DEPTNO as DEPTNO0_0_,
emps1_.EMPNO as EMPNO1_1_,
dept0_.DNAME as DNAME0_0_,
dept0_.LOC as LOC0_0_,
emps1_.ENAME as ENAME1_1_,
emps1_.JOB as JOB1_1_,
emps1_.SAL as SAL1_1_,
emps1_.DEPTNO as DEPTNO1_1_,
emps1_.DEPTNO as DEPTNO0__,
emps1_.EMPNO as EMPNO0__
from
DEPT dept0_
left outer join
EMP emps1_
on dept0_.DEPTNO=emps1_.DEPTNO
-------6.右连接-------
Hibernate:
select
dept0_.DEPTNO as DEPTNO0_0_,
emps1_.EMPNO as EMPNO1_1_,
dept0_.DNAME as DNAME0_0_,
dept0_.LOC as LOC0_0_,
emps1_.ENAME as ENAME1_1_,
emps1_.JOB as JOB1_1_,
emps1_.SAL as SAL1_1_,
emps1_.DEPTNO as DEPTNO1_1_
from
DEPT dept0_
right outer join
EMP emps1_
on dept0_.DEPTNO=emps1_.DEPTNO

11.hibernate的连接查询的更多相关文章

  1. 【学习笔记】Hibernate HQL连接查询和数据批处理 (Y2-1-7)

    HQL连接查询 和SQL查询一样 hql也支持各种链接查询 如内连接 外连接 具体如下 左外连接 left (outer) join 迫切左外连接 left (outer) join fetch 右外 ...

  2. hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法

    1 当使用left join左连连接,sql语句为 select t from SecondPage t left join t.rightNavbar n where 1=1 页面中出现了部分空行的 ...

  3. Hibernate-ORM:13.Hibernate中的连接查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将会解释Hibernate中的连接查询(各种join) 一,目录 1.内链接 1.1显式内连接(inn ...

  4. Hibernate批量处理数据、HQL连接查询

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 ...

  5. hibernate 实现多表连接查询(转载)

    http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html 为了方便,直接粘过来,方便查看.不收藏了 Hibernate主要支持两种查 ...

  6. hibernate对连接池的支持和HQL查询

    hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...

  7. Hibernate批量处理数据、[HQL连接查询]

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...

  8. Mysql高手系列 - 第11篇:深入了解连接查询及原理

    这是Mysql系列第11篇. 环境:mysql5.7.25,cmd命令中进行演示. 当我们查询的数据来源于多张表的时候,我们需要用到连接查询,连接查询使用率非常高,希望大家都务必掌握. 本文内容 笛卡 ...

  9. 2016年11月19日--连接查询,变量、if else、while

    连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join   on 2.union     在关 ...

随机推荐

  1. 关于spring autowrie的5种方式

    spring自动注入有5中方式,分别是: byName:根据自动注入类中的对象名字,会到配置文件中找相关id或者name的bean,如果找不到则不会匹配,如果找到多个bean,则会报错. byType ...

  2. hdu1035

    #include<stdio.h>#include<string.h>int step,n,m;int a[1010][1010];char map[11][11];void ...

  3. 利用css来让一个div在页面中垂直居中的方法

    一.如何让一个div在页面中垂直居中(请至少列出三种) 1.距离页面窗口左边框和上边框的距离设置为50%,这个50%就是指页面窗口的宽度和高度的50%,最后将该DIV分别左移和上移,左移和上移的大小就 ...

  4. Ajax.BeginForm无法调用 ajaxOptions的js函数

    使用ajax.beginForm无法调用ajaxOptions的js函数的原因,一般都是缺少以下2个JS文件: 1,Install-Package jQuery –version 1.10.22,In ...

  5. R安装

    linux: 在编译R之前,需要通过yum安装以下几个程序: #yum install gcc-gfortran              #否则报”configure: error: No F77 ...

  6. Python数据预处理—归一化,标准化,正则化

    关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...

  7. 查找页面中最大的z-index 的值

    var divs = document.getElementsByTagName("div");for(var i=0, max=0; i<divs.length; i++) ...

  8. Openjudge-NOI题库-出书最多

    描述 假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(2 ≤ n ≤ 26)个作者独立或相互合作编著的.假设m本图书编号为整数(1到999),作者的姓名为字母('A'到'Z'),请 ...

  9. android弹出dialog后,activity得到焦点

    1.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,WindowManager.LayoutParams.FLAG ...

  10. spring mvc 实现文件上传下载

    /** * 文件上传 * @param pictureFile */ @RequestMapping("/reportupload") public ResponseInfo up ...