按主键查询

 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. js贪食蛇

    <!DOCTYPE html><head><title>canvas贪食蛇</title><style>.canvas{    backgr ...

  2. 运用Edraw为WPF应用程序嵌入Office文档的方法总结

    具体描述了运用Edraw Office Viewer Component为WPF应用长须嵌入MS Word,Excel以及Power Point的方法. 打开Visual Studio,并创建一个新的 ...

  3. 【Linux】GCC编译

    GCC简介 GCC基本用法 GCC程序产生过程 GCC编译选项 一.GCC简介 1.1 GCC特点 Gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的 代 ...

  4. jQuery判断checkbox是否选中?操作checkbox(不)选中?

    HTML      <form action="">          <input type="checkbox" name="c ...

  5. matlab练习程序(差异演化DE)

    这两天在看M.Tim Jones的<人工智能>,书中不只介绍原理,而且都有相应的c代码实现. 虽然代码不完全,不过缺少的部分完全可以自己补完. 差异演化和昨天实现的PSO很类似,都属于优化 ...

  6. ubuntu 18 下配置 WebStorm 编译 sass

    ubuntu 18 下配置 WebStorm 编译 scss 标签(空格分隔): IDE 安装Ruby: sudo apt-get install ruby ruby -v ruby 2.5.1p57 ...

  7. sql developer中英文切换

    今天使用oracle sql developer时做调优建议时找到的建议显示为?的乱码,本人sql developer为中文版,修改为英文版后问题解决. 查看帮助菜单中的属性选项卡,user.lang ...

  8. Ant Design项目记录和CSS3的总结和Es6的基本总结

    这里主要是介绍自己运用ANT框架的一些小总结,以前写到word里,现在要慢慢传上来, 辅助生殖项目总结:从每个组件的运用的方法和问题来总结项目. 1.项目介绍 辅助生殖项目主要运用的是Ant.desi ...

  9. KMP算法的工作流程介绍

    最近又想起了KMP算法,原来一直没搞明白工作原理,现在总算是开点窍了,推荐大家看这篇文章,写的很简单易懂 推荐理由:简单明了,是我看过介绍KMP算法流程的所有文章中,最易懂的一篇(这篇文章仅仅是介绍了 ...

  10. SSH 本地和服务器传输

    [转]https://www.cnblogs.com/magicc/p/6490566.html SCP 使用方式如下: 1.上传本地文件到服务器 scp /path/filename usernam ...