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检索方式非常类似,只不过查询语句的风格不同而已,就不详细说明了。

 

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值