12.hibernate命名查询
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命名查询的更多相关文章
- Hibernate 命名查询
1.定义 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式被称为命名查询. 2.创建表结构并添加测试数据 create table `student` ( `id` dou ...
- 使用Hibernate命名查询
HQL查询支持将查询所用的HQL语句放入配置文件中,而不是代码中,在Hibernate映射文件的<hibernate-mapping>元素中使用<query>子元素来定义命名查 ...
- Hibernate 命名查询NamedQuery (转)
转自:http://blog.163.com/ksm19870304@126/blog/static/374552332011993942391/ 配置方式: static List namedQue ...
- Hibernate命名查询
hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...
- hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询
在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...
- Hibernate异常之命名查询节点未找到
异常信息: java.lang.IllegalArgumentException: No query defined for that name [salaryEmps] at org.hiberna ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate(十三)命名查询-批量处理和调用存储过程
一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...
- Hibernate-ORM:14.Hibernate中的命名查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...
随机推荐
- Python基础之字符串
字符串内置处理函数 1.capitalize() 描述: 将字符串的第一个字母变成大写,其他字母变小写. 示例: a= "hello world" print (a.capital ...
- CUDA开发存储器运用(包括存储器之间的转存)
主机端内存(host memory) 主机端叶锁定内存(pinned memory) 显存 寄存器(register) 局部存储器(local memory) 共享存储器(shared memory) ...
- Android之HandlerThread
HandlerThread详解 1 HandlerThread基本原理 HandlerThread继承自Thread,它是一种可以使用Handler的Thread.它的实现很简单,就是在run方法中通 ...
- Mirantis OpenStack 8.0 版本
作为 OpenStack 领域标杆性企业之一的 Mirantis 在2016年3月初发布了最新的 MOS 8.0 版本.本文试着基于公开资料进行一些归纳分析. 1. 版本概况 1.1 概况 社区版本: ...
- windows 开机自动启动方案
方案1: 把要启动的软件的快捷方式放到启动菜单对应的目录里,就像下面这个路径: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Sta ...
- 页面加载与iframe加载函数
<head> <script> $(document).ready(function(){ alert("a"); var wait = documen ...
- SAP HANA 能做什么
HANA不是一个数据仓库,而是一个平台,在这个平台之上用户可以构建数据仓库或集市.报表和仪表盘等. HANA能做的,首先是作为内存数据库,提供数据插入.修改和高效的查询功能. 其次,作为一个平台,在H ...
- 手动安装VS code 插件
现在安装包: 通过修改下面的地址参数:https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publish ...
- linux面试
1.用户进程间通信主要哪几种方式 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信.(2)命名管道(named pipe):命名管道克服 ...
- Java源程序结构
完整的java源程序应该包括下列部分: 1.package语句 l java编译器为每个类生成一个字节码文件,且文件名与类名相同,这就会带来一个问题:同名的类会发生冲突. l 所以package的两个 ...