Hibernate学习(八):检索方式

简介:

Hibaernate中提供了丰富的检索(查询)方式,因为项目中涉及到查询特别是复杂查询的时候基本上用的都市iBatis,所以一直都没怎么用Hibaernate自带的查询方法。总的说来Hibernate有如下集中查询方式:

1.根据OID检索某条指定的记录,典型方法如session.load()session.get()

2HQL检索方式。HQLHibernate Query Language的所写,形式类似SQL语句,只

不过它是面向对象的,从某种程度上而言,你可以说HQL是面向对象的查询语句,而SQL是面向关系的查询语句。使用这种检索方式的典型方法是session.createQuery(String hql),在Hibernate2.0中还有一个session.find方法也是采用的这种检索方式,不过已淘汰了;

3QBC检索方式。使用Criteria接口的API来检索对象。它封装了基于字符串形式的查询语句,提供了更加面向对象的接口。

4.原生SQL检索。使用本地数据库的SQL查询语句。Hibernate会负责把检索到的JDBC ResultSet结果集映射为持久化对象图。典型方法如session.createSQLQuery(String sql)

第一种检索方式使用的已经很普遍了,而且也十分简单,下面主要看后三种检索方式。

一.HQL检索方式

代码片段如下:

…………………………………………………………………………………………

Query query=session.createQuery(“from Customer as c where c.name=:name”);

 

query.setString(“name”,”CMTobby”);

 

List result=query.list();

…………………………………………………………………………………………

一个典型的HQL检索可以分为3个步骤:

1.创建一个Query类型的对象,它包含一个HQL语句;如上面红底的代码,注意from后面跟的是类名而不是表名;

2.动态绑定参数(如果使用了动态参数的话)。动态绑定参数有两种方式:命名参数绑定和位置参数绑定。上例中采用的命名参数绑定,形式是“冒号:参数名”。还有一种位置参数绑定,如下:

Query query=session.createQuery(“from Customer as c where c.name=?”);

query.setString(0,”CMTobby”);

这个方式同JDBC中的预编译方式相似。当同时使用命名参数和位置参数时,位置参数必须出现在命名参数之前,否则运行出错如下面的代码:

Query query=session.createQuery(“from Customer as c where c.name=:name and c.sex=?”);

query.setString(0,”F”);

query.setString(“name”,”CMTobby”);

运行时会报错:cannot define positional parameter after any named parameters have been defined

3.调用list()方法执行查询语句。

二.QBC检索方式

代码片段如下:

…………………………………………………………………………………………

Criteria criteria=session.createCriteria(Customer.class);

 

Criterion criterion1=Expression.eq("sex", "F");

Criterion criterion2=Expression.like("name", "%sb1%");

criteria.add(criterion1);

criteria.add(criterion2);

 

Result list= criteria.list();

…………………………………………………………………………………………

一个典型的QBC可以分为如下几个步骤:

1.创建一个Criteria类型的对象。上面的红色代码所示。这里我们可以看出QBC是面向对象的,并且显然不支持多表的联合查询,因为它是针对某个持久化类进行的。

2.指定查询条件,如上面的绿色代码所示。每一个Criterion类型的对象代表一个查询条件,把所有的Criterion类型对象增加到Criteria中,Criteria可以看成是一个Criterion的集合,在英文中Criteria就是Criterion的复数形式,因此了解点e文对于我们理解程序还是有帮助的,^_^。指定查询条件我们使用的是Expression类,它继承自Restrictions类,它里面定义了很多设定查询条件的方法,详细情况可以看它的API文档。

3.调用list()方法执行查询语句。

三.使用原生SQL检索(Native SQL)

一个典型的代码如下所示:

…………………………………………………………………………………………

Query query=session.createSQLQuery(“selct * from CUSTOMORS where name=:name”);

   

query.setString(“name”,”CMTobby”);

 

List result=query.list();

…………………………………………………………………………………………

 

    这种检索方式和HQL检索方式非常类似,只不过查询语句的风格不同而已,就不详细说明了。










本文转自 646676684 51CTO博客,原文链接:http://blog.51cto.com/2402766/617211,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
SQL Java 数据库连接
Hibernate - QBC和本地SQL对象检索详解
Hibernate - QBC和本地SQL对象检索详解
63 0
|
6月前
|
SQL Java 数据库连接
Hibernate - HQL对象检索详解
Hibernate - HQL对象检索详解
53 0
|
6月前
|
SQL 缓存 Java
Hibernate - 检索策略入门与详解
Hibernate - 检索策略入门与详解
55 0
|
SQL Java 数据库连接
《Hibernate上课笔记》-----class8----Hibernate的检索方式和检索策略
《Hibernate上课笔记》-----class8----Hibernate的检索方式和检索策略
107 0
《Hibernate上课笔记》-----class8----Hibernate的检索方式和检索策略
|
缓存 Oracle Java
hibernate学习之三(悲观锁与乐观锁)
hibernate学习之三(悲观锁与乐观锁)
|
SQL 缓存 Java
hibernate(八) Hibernate检索策略(类级别,关联级别,批量检索)详解
很多看起来很难的东西其实并不难,关键是看自己是否花费了时间和精力去看,如果一个东西你能看得懂,同样的,别人也能看得懂,体现不出和别人的差距,所以当你觉得自己看了很多书或者学了很多东西的时候,你要想想,你花费的也就那么一点时间,别人花你这么多时间也能够学到你所学到的东西,所以还是要继续努力。既然不是天才,唯有靠勤奋来弥补。
195 0
|
Java 数据库连接 数据库
Hibernate学习之Hibernate注解总结
Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一、类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须指定主键属性@Id @Table name:映射表的名称(可选) catalog:目录(可选)默认为空 schema:模式(可选)默认为空 与@Entity注解配合使用,只能表示在实体类class定义处,表示实体类对应数据库表的信息 @Embeddable 表示一个非Entity类,不是一个实体类,可以嵌入到实体类中作为一个属性存在。
1659 0
|
Java 数据库连接 数据库
Hibernate学习之Hibernate注解总结
Hibernate学习之Hibernate注解总结 一、类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须指定主键属性@Id @Table name:映射表的名称(可选) catalog:目录(可选)默认为空 schema:模式(可选)默认为空 与@Entity注解配合使用,只能表示在实体类class定义处,表示实体类对应数据库表的信息 @Embeddable 表示一个非Entity类,不是一个实体类,可以嵌入到实体类中作为一个属性存在。
1351 0
|
Java 数据库连接 数据库