Hibernate查询得三种方法hql 和 sql,qbc

Hibernate是什么
Hibernate是一个开放源代码得对象关系映射框架,他对jdbc进行了非常轻量级得对象封装,它将pojo与数据库表建立映射关系,是一个自动的orm框架,hibernate可以使用自动生成得sql语句,自动执行,是的Java程序员可以随心所欲得使用对象编程思维来操作数据库。

Hibernate查询得三种方法 sql,hql和qbc
sql(Structured Query Language)
sql语句
sql语句
缺点:违背了hibernate得跨平台优点,不宜维护,不面向对象,不推荐使用

hql(Hibernate Query Language)
与所熟悉得sql得语法差不多,不同得是把表名转成类或者对象
hql实例
hql语句
qbc(Query By Criteria)
qbc案例
qbc案例

qbc查询得基本步骤
qbc查询得基本步骤
Restrictions,Order,Projections得常用方法
Restrictions类的常用方法(设置查询条件):
Restrictions类的常用方法(设置查询条件)
Order类的常用方法(设置排序方式):
Order类的常用方法(设置排序方式)
Projections(投影)类的常用方法(统计和分组):
Projections(投影类)类的常用方法(统计和分组)
更多方法,以及方法的详细使用及解释,请参看在线API:Hibernate API Documentation(3.2.7.ga)

1.3.3 QBC的查询示例和基本理解
接下来,基于以上的一些常用方法,我们先看两个示例:
在这里插入图片描述
//分页查询前10条
在这里插入图片描述
看到这里,流程大概很好理解,从方法名就知道无非是把各种条件往里面加最后就可以获得一个符合条件的list。那么,下面再延伸理解一下:
org.hibernate.Criteria实际上是个条件附加的容器,如果想要设定查询条件,则要使用org.hibernate.criterion.Restrictions的各种静态方法传回org.hibernate.criterion.Criterion实例,传回的每个org.hibernate.criterion.Criteria实例代表着一个条件,你要使用org.hibernate.Criteria的add()方法加入这些条件实例。下面看个示例:

//查找age等于(eq)20或(or)age为空(isNull)的User
在这里插入图片描述
//实际上它产生的对应的sql如下
在这里插入图片描述

1.3.4 复合查询
复合查询就是在原有的查询基础上在进行查询,比如有Clazz班级,包含对象属性Student,那么我们希望查询 “包含学生姓名为Bob” 的班级,那么就可以使用复合查询:
在这里插入图片描述
如果是DetachedCriteria,则是根据关联属性的名称,而非Class,如:
在这里插入图片描述

1.3.5 Hibernate中Criteria方式的基本使用流程
所以,基于以上的的示例和理解,我们不难看出Criteria的基本使用流程:
在这里插入图片描述
2、DetachedCriteria是什么,和Criteria有什么区别
父接口CriteriaSpecification,其下有子接口Criteria和实现类DetachedCriteria,Criteria和DetachedCriteria均可使用Criterion和Projection设置查询条件。可以设置FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于Criteria还可以设置FlushModel(冲刷 Session 的方式)和LockMode(数据库锁模式)。

Criteria和DetachedCriteria的主要区别在于创建的形式不一样,Criteria是在线的,所以它是由Hibernate Session进行创建的;而DetachedCriteria是离线的,创建时无需Session,它通过2个静态方法forClass(Class) 或 forEntityName(Name) 进行DetachedCriteria 的实例创建。

(另,Spring的框架提供了getHibernateTemplate ().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria来返回查询结果)

所以它也称为离线条件查询,即建立一个DetachedCriteria对象,将查询的条件等指定好,然后在session.beginTransaction()后将这个对象传入。通常这个对象可以在表示层建立,然后传入业务层进行查询。

3、DetachedCriteria的基本使用
上面已经提到,Criteria和DetachedCriteria均可使用Criterion和Projection设置查询条件,设置排序方式。那么这里也无需过度展开,以一个简单的例子来示意吧:
//查询id为1且在今天或今天之前出生的user的名单
//1、创建DetachedCriteria并设置条件
在这里插入图片描述
//2、执行查询(Criteria getExecutableCriteria(Session session))
在这里插入图片描述
这里值得一提的是,DetachedCriteria并没有像Criteria一样有list()的方法来返回List,所以需要以此获取一个可执行的Criteria,达到真正执行查询的目的,我们看下官方的解释:
 
org.hibernate.criterion
Class DetachedCriteria
getExecutableCriteria
public Criteria getExecutableCriteria(Session session)
Get an executable instance of Criteria, to actually run the query.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值