Query session.createQuery(String hql)方法;

* hibernate的session.createQuery()方法是使用HQL(hibernate的查询语句)语句查询对象的。

* hql:是查询对象的,例如:"from User",其中from不区分大小写,而User是区分大小写,因为它是对象。是User类

* 返回Query对象。

* 执行这条语句后,Hibernate会根据配置文件中所配置的数据库适配器自动生成相应数据库的SQL语句。如:

ibernate: select user0_.id as id0_, user0_.name as name0_, user0_.password as password0_, 
user0_.createTime as createTime0_, user0_.expireTime as expireTime0_ from User user0_

Query的分页查询:

@Test
public void testQuery1() {
Session session = null;
try {
session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("from User");
// 分页查询
query.setFirstResult(0);// 从哪一条记录开始查询,是从0开始计算
query.setMaxResults(2);// 分页每页显示多少条记录。
/*
* Query对象中有一个list()方式,将所有查询来的对象自动生成list对象返回。
*/
List userList = query.list();
// 然后我们就可以显示数据了。
for (Iterator iter = userList.iterator(); iter.hasNext();) {
User user = (User) iter.next();
System.out.print(user.getId() + " ");
System.out.println(user.getName());
}
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtil.closeSession(session);
}
}

开源O/R映射框架内容回顾

Hibernate是一个O/R映射框架(也称为ORM)

从ORM词来看,O---Object(对象模型);R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一个完善ORM框架应该具有更多的功能:如HQL相关的查询语句、提供缓存机制(一级缓存、二级缓存)。

Java开发数据库时,使用JDBC,但是需要编写大量相同的代码,这样不便提高生产效率,而hibernate可以让你不能编写大量的相同的代码。从而提高生产效率。另一方面,hibernate可以让我们更面对象化开发,还有一个移植性hibernate只需要更改配置文件(数据库适配器)的选项,就可以非常方便的移植到不同的数据库,而不需要重新编写不同数据库厂家所对应的JDBC、SQL语句了。还有hibernate可以解决阻抗不匹配(Java类中有继承关系,而关系型数据库中没有这个功能(目前数据库还不是面向对象,都是关系型数据库)),使用hibernate框架,侵入性比较好(因此hibernate称为轻量级框架)

O/R映射框架和使用环境:在程序中添加→修改→保存;查询可以批量,但是修改不可为批量性;程序中有大量的数据只读,这样就可以一次性读取到缓存中;对象间存在自然的关系;不需要数据库SQL特定的语句优化。

O/R映射框架不适合环境:聚集性操作:批量性添加、修改。批量的统计查询。

Configuration对象:读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的. new Configuration()默认是读取hibernate.properties, 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件

SessionFactory:是一个重量级对象,它的创建是耗时的。因为它对应一个数据库里所有配置,包括一些缓存机制都由SessionFactory来维护,它与二级缓存是绑定的。通常只创建一次,但它是线程安全的。

Session:是非线程安全的,它是通过SessionFactory来创建的。不要多个线程同时访问同一个Session,否则会出现一些未知问题。通常是一个请求对应一个Session,请求完成要关闭Session

Transaction:hibernate默认不是自动开启事务的,所以要手动开启事务、手动提交事务、手动回滚事务、手动关闭事务。当然可以通过配置文件配置成自动。一般使用手动。

Hibernate正常的开发思路:考虑对象模型这一块,把对象模型建立起来,把对象图建立起来,对象之间的关系建立起来、然后再编写映射文件(hbm),然后根据映射文件生成数据库表。数据库对我来说是透明的,我们只操作对象不用关心数据库。

hibernate--query接口初步的更多相关文章

  1. Hibernate 查询:HQL查询(Hibernate Query Languge)

    HQL是一种面向对象的查询语言,其中没有表和字段的概念,只有类,对象和属性的概念. 使用HQL查询所有学生: public static void main(String[] args) { Sess ...

  2. Hibernate学习笔记(5)---Query接口

    Hibernate中具有三种检索方式(HQL,QBC,SQL) Query接口 一个查询接口,用于向数据库中查询对象.并控制执行查询的过程.Query接口内封装了一个HQL查询语句. 举个栗子 //查 ...

  3. hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。

    hibernate核心接口: 所有的hibernate应用都会访问hibernate的5个核心接口 1,Configuration接口 Configuration用于配置并且根启动Hibernate. ...

  4. Hibernate常用接口

    Hibernate的接口类型 在了解了Hibernate的基本配置,映射文件后,道路已经铺平了.我们继续往前走.接下来,我们应该做的是了解Hibernate常用的接口,对Hibernate的工作方式进 ...

  5. Hibernate详解(5)——Hibernate核心接口和工作原理

    Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...

  6. Hibernate常见接口说明

    (一)SessionFactory 1. getCurrentSession()和openSession()区别 getCurrentSession创建的session会和绑定到当前线程,而openS ...

  7. Hibernate核心接口

    1.Configuration接口 Configuration负责管理Hibernate的配置信息. 2,SessionFactory接口 SessionFactory负责创建Session实例,能够 ...

  8. hql(Hibernate Query Language)

    1.Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate ...

  9. 菜鸟学SSH(十)——Hibernate核心接口

    在使用Hibernate的时候,我们通常都会用的Configuration.SessionFactory.Session.Transaction.Query和Criteria等接口.通过这些接口可以, ...

  10. Hibernate Query Language查询:

    Hibernate Query Language查询: Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供 ...

随机推荐

  1. JAVA中toString方法

    因为它是Object里面已经有了的方法,而所有类都是继承Object,所以"所有对象都有这个方法". 它通常只是为了方便输出,比如System.out.println(xx),括号 ...

  2. pthread属性设置

    Posix线程中的线程属性pthread_attr_t主要包括scope属性.detach属性.堆栈地址.堆栈大小.优先级.在pthread_create中,把第二个参数设置为NULL的话,将采用默认 ...

  3. [MySql] - 解决部署的服务器没有安装MySql Connector

    1. 在C盘安装mysql的位置找到三个DLL,复制到Bin文件夹下. 2. 在配置文件的web下添加引用,PubulishKeyToken 根据版本来. <system.data> &l ...

  4. MonoBehaviour

    所有的Unity脚本都继承自MonoBehaviour这个类,它没有Main函数入口,采用了事件触发的模式,根据不同的事件响应不同的函数. void Start(): void Update():每一 ...

  5. TCP协议三次握手、四次断开 过程分析

    建立TCP连接的过程需要进行三次信息交换,通常称为“三次握手”,示意图如下:

  6. word小技巧

    如何将英文和数字替换为times new romans 1,点击替换(ctrl+H) .2,在查找内容中输入”([A-Z0-9])“(不包括引号,但包括小括号),这是替换所有大写字母和数字,如果还想替 ...

  7. ETL Pentaho Data Integration (Kettle) 插入/更新 问题 etl

    Pentaho Data Integration (Kettle) 使用此工具 按 索引  做 插入更新操作时,也可能报 索引重复 的错误, 解决方法:  匹配的索引字段可能有null值,会导致此错误 ...

  8. 后缀树(Suffix Tree)

          问题描述:               后缀树(Suffix Tree)   参考资料: http://www.cppblog.com/yuyang7/archive/2009/03/29 ...

  9. css的transition 属性

    把鼠标指针放到 div 元素上,其宽度会从 100px 逐渐变为 300px: div { width:100px; transition: width 2s; -moz-transition: wi ...

  10. Emmet快速编写CSS样式

    基本的CSS样式编写时,很多样式只需输入首字母即可得到不带属性值的CSS样式,像上面说到的margin. 1.而对于一些带有特定的属性值的CSS样式,只需输入CSS标签与属性值的首字母就可以,比如: ...