按主键查询

 dao层

 public Emp get(Serializable id){
//通过session的get方法根据加载指定对象
return (Emp)HibernateUtil.currentSession().get(Emp.class,id);
}

service层

public Emp findEmpById(Integer id){
Transaction tx=null;
Emp result =null;
try {
tx=HibernateUtil.currentSession().beginTransaction(); //开启事务
result=empDao.get(id); //调用Dao,根据OID加载指定对象
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null)
tx.rollback(); //回滚事务
}
return result;
}

test测试类

public static void main(String[] args) {
EmpService empService = new EmpService();
//查询
Emp emp =empService.findEmpById(7788);
System.out.printf(emp.getEname()); }

使用HQL

什么是hql

  hql查询是一种面向对象的查询语言,其中没有表和字段的概念,只有类,对象和属性的概念,hql语句中除了java类和属性名称外,查询语句对大小写敏感,

所以SELECT和select是相同的.但是cn.entity.emp和cn.entity.EMP.hql语句中的关键字建议使用小写字母.

编写hql

  hql的语法跟我们数据库中写的语法差不多,需要注意的是hql中查询所有的列并不需要select关键字如下,最重要的一点是hql列对应的是类的中的字段名称,而不是数据库中的列

dao层

 public List<Emp> findEmp(String job){
String hql = "from Emp";
Query query =HibernateUtil.currentSession().createQuery(hql);return query.list();
}

service层

 public void findEmp(String job){
Transaction tx =null;
try {
tx=HibernateUtil.currentSession().beginTransaction();
List<Emp> emps = empDao.findEmp();
for (Emp e:emps) {
System.out.println(e.getEname());
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
}
}

这样即可把全表的数据读取出来,或者使用迭代器如下

 public Iterator<Emp> findAll(){
String hql ="from Emp"; //定义hql
Query query = HibernateUtil.currentSession().createQuery(hql);
return query.iterate(); //执行查询
}
public Iterator<Emp> findAllEmps(){
Transaction tx=null;
Iterator<Emp> emps=null;
try {
tx=HibernateUtil.currentSession().beginTransaction(); //打开事务
emps=empDao.findAll(); //获取数据
Emp emp=null;
while (emps.hasNext()){ //判断是否遍历到末尾
emp=emps.next();
System.out.println("员工名称:"+emp.getEname());
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null)
tx.rollback();
}
return emps;
}

在hql语句中绑定参数

query接口提供的绑定不同类型的参数的方法

  • setBoolean():绑定Boolean类型的参数
  • setByte():绑定byte类型的参数
  • setDouble():绑定double类型的参数
  • setDate():绑定util.Date类型的参数
  • setString():绑定String类型的参数

两种语法:

  • setXXX(下标,值)
  • setXXX(参数名称,值)

如果需要使用setXXX(参数名称,值)进行绑定参数 如下:

String hql = "from Emp where job=:j";
Query query =HibernateUtil.currentSession().createQuery(hql);
query.setString("j",job);

如果是setXXX(下标,值)参数绑定  如下:

String hql = "from Emp where job= ?";
Query query =HibernateUtil.currentSession().createQuery(hql);
query.setString(1,job);

注意

   setXXX(参数名称,值) 在hql中 需要使用 :自定义参数名称

  setXXX(下标,值) 在hql中需要使用 ?

除了以上用于绑定特定类型参数的方法,hibernate还提供了setParameter()方法,用来绑定任意类型的参数.

public List<Emp> findDate(Emp hireDate){
String hql = "from Emp where hiretDate > :hiretDate"; // :hiretDate 的hiretDate是与emp类的hiretDate名字一致
Query query =HibernateUtil.currentSession().createQuery(hql);
query.setProperties(hireDate); //传参
return query.list();
}

分页和投影

  hql中的分页非常简单,如下代码

public List<Emp> empPage(Integer start,Integer end){
String hql = "from Emp";
Query query =HibernateUtil.currentSession().createQuery(hql);
query.setFirstResult((start-1)*end); //设置页数
query.setMaxResults(end); //设置每页显示的数据
return query.list();
}
 public void empPage(Integer start,Integer end){
Transaction tx=null;
try {
tx=HibernateUtil.currentSession().beginTransaction();
List<Emp> emps = empDao.empPage(start,end);
for (Emp e:emps) {
System.out.println(e.getEname());
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null)
tx.rollback();
}
}

假设是第二页 查六笔数据如下结果

我们再来看下数据库中

投影

  使用from 表名 表示查询表的所有列,使用SELECT 列1, 列2, 列3 from 表名 则可以仅返回指定列,这种操作称为投影。

hibernate连接oracle数据库进行查询的更多相关文章

  1. hibernate 连接 oracle数据库

    前言:以下所有的操作都是基于你已经成功安装了oracle数据库并且java的开发环境正常的情况下进行的. 如果没有完善请先配置基础环境. 第一步:配置需要的环境(下载并导入需要的包). 我的百度云盘里 ...

  2. hibernate连接oracle数据库

    前言:以下所有的操作都是基于你已经成功安装了oracle数据库并且java的开发环境正常的情况下进行的. 如果没有完善请先配置基础环境. 第一步:配置需要的环境(下载并导入需要的包). 下载链接:ht ...

  3. hibernate 连接oracle数据库的配置 (参考)

    <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          &qu ...

  4. php连接oracle数据库转载

    php连接oracle数据库及查询数据的方法 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-12-29 这篇文章主要介绍了php连接oracle数据库及查询数据的方法 ...

  5. 连接Oracle数据库的Hibernate配置文件

    连接Oracle数据库的Hibernate配置文件连接Oracle的Hibernate配置文件有两种格式,一种是xml格式的,另一种是Java属性文件格式的.下面分别给出这两种格式配置文件的代码. 1 ...

  6. C#连接Oracle数据库查询数据

    C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...

  7. 连接Oracle数据库的Hibernate配置…

    连接Oracle数据库的Hibernate配置文件 连接Oracle的Hibernate配置文件有两种格式,一种是xml格式的,另一种是Java属性文件格式的.下面分别给出这两种格式配置文件的代码. ...

  8. java连接Oracle数据库

    Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...

  9. 记录排查解决Hubble.Net连接Oracle数据库建立镜像库数据丢失的问题

    起因 前几天在弄Hubble连接Oracle数据库,然后在mongodb中建立一个镜像数据库; 发现一个问题,原本数据是11W,但是镜像库中只有6w多条; 刚开始以为是没运行好,又rebuild了一下 ...

随机推荐

  1. jQuery 添加样式属性的优先级别

    jQuery类中添加多个属性 $('#five .a') .css({ color:'blue', border:'2px solid green', background:'blue' }); jQ ...

  2. ArcEngine开发鹰眼实现问题

    在网上百度一下有关AE鹰眼实现的代码,基本是一样的,可问题是好多代码自己运行起来鹰眼却总是加不进地图.住视图axMapControl1.OnMapReplaced(),axMapControl1.On ...

  3. 域名和DNS服务器

    概念性的东西: 域名:     ①.百度:域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理 ...

  4. aiohttp模块1 client

    Make a Request import aiohttp async with aiohttp.ClientSession() as session: async with session.get( ...

  5. SQL Server ->> 存储过程sp_rename重命名数据对象

    1) 表转移Schema和重命名表 ALTER SCHEMA Stage TRANSFER dbo.Stage_AAA; EXEC sp_rename 'Stage.Stage_AAA', 'AAA' ...

  6. ICONIX Process

    1.像rup,iconix是用例驱动的但是比rup更轻量级.  iconix 仅仅使用四种diagram(用例图.健壮性图.时序图.类图)就可以把用例文本转成代码. 2.值得注意的健壮性分析图并不是u ...

  7. 到底哪种类型的错误信息会阻止business transaction的保存

    当试图在CRM WebUI保存一个business transaction比如Opportunity时,可能会遇到各种各样的错误消息.有的错误消息会阻止Business transaction被sav ...

  8. (转)每天一个linux命令(1):ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  9. Android(java)学习笔记47:通过反射获得构造方法并且使用

    1. 获取字节码文件对象:             Class c = Class.forName("cn.itcast_01.Person"); 2. 获取构造方法       ...

  10. 【BZOJ3495】PA2010 Riddle

    题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多 ...