按主键查询

 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. linux环境下 mysql数据库忘记密码 处理办法

    整个修改过程大概3-10分钟(看个人操作),这个时间内mysql出于不需要密码就能登陆的状态,请设法保证系统安全 不罗嗦直接上步骤 1.vi /etc/my.cnf 在[mysqld]下,添加一句:s ...

  2. spark编程python实例

    spark编程python实例 ValueError: Cannot run multiple SparkContexts at once; existing SparkContext(app=PyS ...

  3. Arcgis flex 切片地图麻点

    在arcgis server中发布地图切片完成后,有时候在访问地图的时候会出现很多麻点, 其实是你切片的时候没有注意到一些选项.... 默认的切片是PNG8,说到这可能就明白了吧,png8的色彩范围: ...

  4. AJAX 学习笔记 2017_05_04

    1.使用 AJAX 修改该文本内容 <%@ page language="java" contentType="text/html; charset=UTF-8&q ...

  5. ORACLE中一个字符占多少字节?

    问题描述 或许你会说一个中文字符占2个字节,这是一定的?如何计算一个字符串的字节数? 解决方案 在oracle中一个字符特别是中文占几个字节是不同的. 比如我创立一个表create table tes ...

  6. Sharepoint学习笔记--如何定位网站集所在的w3wp进程

     我们在调试WebPart或者EventHandler之类的自定义组件时会遇到如何定位部署的网站集所对应的w3wp.exe进程的问题,方法如下 : 方法1. 直接开始运行,输入cmd,再输入iisap ...

  7. Selenium2学习(三)-- 八种元素元素定位(Firebug和firepath)

    前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中是至关 ...

  8. oracle_procedure

    define: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句 集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. ...

  9. CSS基础语法(三) CSS的6种特性

    样式表常用写法及特性(组合.继承.关联性.权值性.层叠性.重要性) 1.样式的组合:把具有相同声明定义的选择符组合在一起,并用逗号隔开.-例如:段落元素p.单元格元素td和类c1可以使用相同样式: p ...

  10. IOS Xib使用