Hibernate(十)HQL查询二
一、数据库的emp名和dept表
建立持久化类和配置文件,可以用MyEclipse直接生成
持久化类
package entity;
import java.util.Date;
public class Emp implements java.io.Serializable {
// Fields
private Short empno;
private Dept dept;
private String ename;
private String job;
private Short mgr;
private Date hiredate;
private Double sal;
private Double comm;
// Constructors
/** default constructor */
public Emp() {
}
/** minimal constructor */
public Emp(Short empno) {
this.empno = empno;
}
/** full constructor */
public Emp(Short empno, Dept dept, String ename, String job, Short mgr,
Date hiredate, Double sal, Double comm) {
this.empno = empno;
this.dept = dept;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
}
// Property accessors
public Short getEmpno() {
return this.empno;
}
public void setEmpno(Short empno) {
this.empno = empno;
}
public Dept getDept() {
return this.dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public String getEname() {
return this.ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return this.job;
}
public void setJob(String job) {
this.job = job;
}
public Short getMgr() {
return this.mgr;
}
public void setMgr(Short mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return this.hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Double getSal() {
return this.sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
public Double getComm() {
return this.comm;
}
public void setComm(Double comm) {
this.comm = comm;
}
}
Emp持久化类
package entity; import java.util.HashSet;
import java.util.Set; public class Dept implements java.io.Serializable { // Fields private Byte deptno;
private String dname;
private String loc;
private Set emps = new HashSet(0); // Constructors /** default constructor */
public Dept() {
} /** minimal constructor */
public Dept(Byte deptno) {
this.deptno = deptno;
} /** full constructor */
public Dept(Byte deptno, String dname, String loc, Set emps) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
this.emps = emps;
} // Property accessors public Byte getDeptno() {
return this.deptno;
} public void setDeptno(Byte deptno) {
this.deptno = deptno;
} public String getDname() {
return this.dname;
} public void setDname(String dname) {
this.dname = dname;
} public String getLoc() {
return this.loc;
} public void setLoc(String loc) {
this.loc = loc;
} public Set getEmps() {
return this.emps;
} public void setEmps(Set emps) {
this.emps = emps;
} }
Dept持久化类
emp类配置文件
<?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="entity.Emp" table="EMP" schema="SCOTT">
<id name="empno" type="java.lang.Short">
<column name="EMPNO" precision="4" scale="0" />
<generator class="assigned" />
</id>
<many-to-one name="dept" class="entity.Dept" fetch="select">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
<property name="ename" type="java.lang.String">
<column name="ENAME" length="10" />
</property>
<property name="job" type="java.lang.String">
<column name="JOB" length="9" />
</property>
<property name="mgr" type="java.lang.Short">
<column name="MGR" precision="4" scale="0" />
</property>
<property name="hiredate" type="java.util.Date">
<column name="HIREDATE" length="7" />
</property>
<property name="sal" type="java.lang.Double">
<column name="SAL" precision="7" />
</property>
<property name="comm" type="java.lang.Double">
<column name="COMM" precision="7" />
</property>
</class>
</hibernate-mapping>
Emp.hbm.xml
dept类配置文件
<?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="entity.Dept" table="DEPT" schema="SCOTT">
<id name="deptno" type="java.lang.Byte">
<column name="DEPTNO" precision="2" scale="0" />
<generator class="assigned" />
</id>
<property name="dname" type="java.lang.String">
<column name="DNAME" length="14" />
</property>
<property name="loc" type="java.lang.String">
<column name="LOC" length="13" />
</property>
<set name="emps" inverse="true">
<key>
<column name="DEPTNO" precision="2" scale="0" />
</key>
<one-to-many class="entity.Emp" />
</set>
</class>
</hibernate-mapping>
Dept.hbm.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="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property> <mapping resource="entity/Emp.hbm.xml" />
<mapping resource="entity/Dept.hbm.xml" /> </session-factory> </hibernate-configuration>
hibernate.cfg.xml
二、Query接口分页实现
- 根据结果获得总亡录数:
Querty query=session.createQuery("from Emp");
List list=query.list();
int count=list.size();
- 计算总页数:
int totalPages=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);
- 实现分页:
query.setFirstResult((pageIndex-1)*pageSize); //开始记录数
query.setMaxResults(pageSize);//每页显示最大记录数
List resultList=query.list(); //每页显示的记录集合
查询全部员工
/*
* 查询员工表内容
*/
public static void findEmp(){
Session session=new Configuration().configure().buildSessionFactory().openSession();
//查询员工表按入职日期升序排,日期相同按名字降序
String hql=" from Emp e order by e.hiredate ,e.ename desc ";
Query query=session.createQuery(hql);
List<Emp> emps=query.list();
for (Emp emp : emps) {
System.out.println("员工编号:"+emp.getEmpno()+"\t姓名: "+emp.getEname()+"\t入职日期:"+emp.getHiredate()+"\t部门名称:"+emp.getDept().getDname());
} }
分页查询
/*
* 分页查询
*/
public static void pageDisplay(){
Session session=new Configuration().configure().buildSessionFactory().openSession();
String hql="from Emp";
//第几页
int pageIndex=4;
//每页显示记录数
int pageSize=4;
Query query=session.createQuery(hql);
//起始记录数
query.setFirstResult((pageIndex-1)*pageSize);
//每页显示最多记录数
query.setMaxResults(pageSize);
List<Emp> emps=query.list();
for (Emp emp : emps) {
System.out.println("员工编号:"+emp.getEmpno()+"\t姓名: "+emp.getEname()+"\t入职日期:"+emp.getHiredate()+"\t部门名称:"+emp.getDept().getDname());
} }
三、连接查询

部门表中有个40部门,员工表中没有人是40部门的,
首先向EMP表中插入一条没有部门的记录
insert into emp(empno,ename,job,hiredate,sal)values(8888,'张三','业务员',sysdate,800);
3.1、查询部门的所有员工使用内连接
String hql="from Dept d inner join d.emps";
3.2、查询部门的所有员工使用左外连接
String hql="from Dept d left join d.emps";
3.3、查询部门的所有员工使用右外连接
String hql="from Dept d right join d.emps";
Hibernate(十)HQL查询二的更多相关文章
- Hibernate之HQL查询
一.Hibernate 提供了以下几种检索对象的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式:使用面向对象的 H ...
- Hibernate五 HQL查询
HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...
- hibernate的hql查询
1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...
- Hibernate 的hql查询简介【申明:来源于网络】
Hibernate 的hql查询简介[申明:来源于网络] Hibernate 的hql查询简介:http://blog.csdn.net/leaf_130/article/details/539329 ...
- Hibernate学习笔记(十) — HQL查询
一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...
- Hibernate(九)HQL查询
一.Hibernate提供的查询方式 OID查询方式:主键查询.通过get()或者load()方法加载指定OID的对象查询结果为一个 HQL查询方式:通过Query接口使用HQL语言进行查询 QBC查 ...
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- hibernate的hql查询语句总结
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- Hibernate 、Hql查询和Criteria查询
HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...
随机推荐
- ZOJ3673:1729
1729 is the natural number following 1728 and preceding 1730. It is also known as the Hardy-Ramanuja ...
- 你得学会并且学得会的Socket编程基础知识(续)——Silverlight客户端
本文将在这个案例的基础上,加入一个特殊场景,利用Silverlight来实现客户端.有的朋友可能会说,其实是一样的吧.请不要急于下结论,有用过Silverlight的朋友都有这种体会,很多在标准.NE ...
- Bootstrap 3之美02-Grid简介和应用
本篇主要包括: ■ Grid简介■ 应用Grid■ Multiple Grids Grid简介 Bootstrap中,把页面分成12等份,这就是所谓的Grid. 在Bootstrap中,用类名控 ...
- python测试开发django-10.django连接mysql
前言 Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle.本篇以mysql为例简单介绍django连接mysql进行数据操作 Django连 ...
- utils/CCArmatureDefine
#ifndef __CCARMATUREDEFINE_H__ #define __CCARMATUREDEFINE_H__ //#define _USRDLL 1 #include "coc ...
- windows下的Nginx+Squid+Tomcat+Memcached集群
- JDBC连接oracle RAC数据库配置
RAC的配置如下: node1:ip地址192.168.60.132,实例名:rac1,主机名:rac1 node2:ip地址192.168.60.144,实例名:rac2,主机名:rac2 RAC服 ...
- apache基金会项目及甲骨文项目汇总
Apache软件基金会 顶级项目 ▪ ActiveMQ ▪ Ant ▪ Apache HTTP Server ▪ APR ▪ Beehive ▪ Camel ▪ Cassandra ▪ Cayenne ...
- easyui-datetimebox设置默认时分秒00:00:00
datetimebox默认打开面板显示的是当前的时间,有个需求就是当打开面板时显示固定的”00:00:00”时间, 它本身有个方法spinner方法可以获得时间微调器对象,它所依赖的组件combo有个 ...
- 跟我学Spring3(9.1):Spring的事务之数据库事务概述
原文出处: 张开涛 9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致 ...