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,实体类,甚至注解的方式来编 ...
随机推荐
- JavaScript简单的一些....
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 命令行启动Hololens Emulator,可解决内存不足的问题
有时候在虚拟机测试时常会出现 内存不足 的情况,导致应用卡顿,调整 /memsize 参数大小: start "HoloLens" "C:\Program Files ( ...
- System.Data.DbType和数据库映射关系
有如下类型的映射对照: System.Data.SqlClient.SqlDbType System.Data.OleDb.OleDbType System.Data.Odbc.OdbcType S ...
- vlc-android1.8.0的全部源代码[包括C语言]
我们基于vlc,整理出了vlc-android1.8.0的全部源代码, 并增加了LibVLC的简单调用, 您只需要7行代码,就可以完成调用,和原生的MediaPlayer类似. 下载地址https:/ ...
- AngularJs中,如何在父元素中调用子元素为自定义Directive中定义的函数?
最近一段时间准备使用AngularJs中的自定义Directive重构一下代码. 在这里说明一下,把自定义控件封装成Directive并不一定是要复用,而是要让代码结构更加清晰.就好像你将一个长方法拆 ...
- ajax中的stasus错误详解
一.英文版解析 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) met ...
- Qt 学习笔记
继承自QObject 的Qt类都具有支持信号和槽的能力,并且在子类的实现代码中直接使用connect()函数 pwdLineEdit->setEchoMode(QLineEdit::Passwo ...
- 浙大pat1013题解
1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...
- sap 设备cnsapwin不支持页格式*****
SAP SMARTFORMS 打印 CNSAPWIN 不支持页格式 解决办法: 在smartforms里的表格属性虽然定义了要打印的页格式 ZUNIA5 ,但是打印时会提示错误:" CNSA ...
- 使用sublime text3 连接sftp/ftp(远程服务器)
首先说明的是Sumblime Text 3,下载安装后,打开软件 在红色箭头指定的控制区域粘贴下面这段英文 import urllib.request,os,hashlib; h = '2915d18 ...