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>

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

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 + "]";
} }

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 + "]";
} }

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>

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> <!-- 命名查询节点 -->
<query name="findEmpByJob">
<!-- cdata节点放入hql语句,原生sql查询语句 -->
<![CDATA[
from Emp e where e.job=:pjob
]]>
</query>
</hibernate-mapping>

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

 package com.dao;

 import java.util.List;

 import org.hibernate.Query;
import org.hibernate.Session; import com.entity.Emp;
import com.util.HibernateUtil; public class EmpDao { public static void main(String[] args) {
System.out.println("-----------1.关联查询-----------");
getEmp(); } /**
*1.命名查询
*/
private static void getEmp() {
Session session=HibernateUtil.getSession();
/*根据映射文件的query节点的name属性值获取hql语句*/
Query query=session.getNamedQuery("findEmpByJob");
/*给命名参数赋值*/
//query.setString("pjob", "CLERK");
query.setParameter("pjob", "CLERK");
List<Emp> list=query.list();
for (Emp emp : list) {
System.out.println(emp.getDept().getDeptno());
System.out.println(emp);
}
HibernateUtil.closeSession(); } }

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

12.hibernate命名查询的更多相关文章

  1. Hibernate 命名查询

    1.定义 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式被称为命名查询. 2.创建表结构并添加测试数据 create table `student` ( `id` dou ...

  2. 使用Hibernate命名查询

    HQL查询支持将查询所用的HQL语句放入配置文件中,而不是代码中,在Hibernate映射文件的<hibernate-mapping>元素中使用<query>子元素来定义命名查 ...

  3. Hibernate 命名查询NamedQuery (转)

    转自:http://blog.163.com/ksm19870304@126/blog/static/374552332011993942391/ 配置方式: static List namedQue ...

  4. Hibernate命名查询

    hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...

  5. hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询

    在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...

  6. Hibernate异常之命名查询节点未找到

    异常信息: java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] at org.hiberna ...

  7. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate(十三)命名查询-批量处理和调用存储过程

    一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...

  9. Hibernate-ORM:14.Hibernate中的命名查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...

随机推荐

  1. ListView的局部刷新

    有的列表可能notifyDataSetChanged()代价有点高,最好能局部刷新. 局部刷新的重点是,找到要更新的那项的View,然后再根据业务逻辑更新数据即可. private void upda ...

  2. volatile(C# 参考)

    本文档已存档,并且将不进行维护. volatile(C# 参考) 若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档. vo ...

  3. Web前端优质学习网站

    * 官方:           W3C:http://www.w3.org/           ECMA:http://www.ecmascript.org/           Mozilla:h ...

  4. CSU 1806 Toll

    最短路,自适应$Simpson$积分. 看了别人的题解才知道有个东西叫自适应$Simpson$积分. 有这样一个积分公式:$\int_a^b {f(x)dx}  \approx \frac{{b - ...

  5. <T> List<T>前面<T>的意思

    先看例子: import java.util.*; class Fruit { public String toString() { return "Fruit"; } } cla ...

  6. ora2pg数据迁移

    1.安装strawberry-perl-5.242.安装ora2pg-17.4 #perl Makefile.PL #dmake && dmake install3.安装ora2pg相 ...

  7. 安卓activity之间值共享解决办法,tabhost之间共享父类值,字符串类型的转换,获取每一个listview的item

    1.tabhost父类值共享的解决办法 dianzhanliebiao.java是传值页面,zhuyemian.java放的是tabhost,dianzhangaikuang.java是tabhost ...

  8. TypeScript 学习一 参数,函数,析构表达式

    1,TypeScript是由谷歌开发的,并且新出的Angular2框架就是谷歌公司由TypeScript语言编写的,所以现在TypeScript是有微软和谷歌一起支持的: 2,TypeScript在j ...

  9. js 冒泡排序

    var arr = []; for(var i=0; i<100000; i++){ arr.push(parseInt(Math.random()*100)) }; var t1 = Date ...

  10. HTTP状态码(HTTPStatusCode)

    HTTP状态码(HTTPStatusCode) 祓焘铺 布稍酡 盛坭馆 距熏屿砥 女装出来扔了套到床上然后自己穿了套 跎徨鼻卩 权术埭 悌颞 蔹咽诹ㄒ 椿酣漂作 钱是小事关键是没有老师耸了 ...