开发者社区> 嘿嘿!!> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Hibernate高级查询

简介: @Test DDL创建表 hibernate标准化对象查询(QBC) 也即是把查询条件封装成一个对象,它支持运行时动态生成查询语句 Criteria接口 存放查询条件的容器 Criteria criteria=session.
+关注继续查看

@Test
DDL创建表

hibernate标准化对象查询(QBC)

也即是把查询条件封装成一个对象,它支持运行时动态生成查询语句

Criteria接口

存放查询条件的容器

Criteria criteria=session.createCriteria(Class persiistentClass);

//获取所有数据
criteria.list()

//条件查询---》Ctitertion接口的实现类Restrictions

Critertion接口

代表一个查询条件,可以通过他的实现类Restrictions类来产生查询条件,并且还需要通过Criteria的add方法添加到Criteria实例中

Criterion cl=Restrictions.like("name","zhang%");
criteria.add(cl);

多个条件

Criterion cl=Restrictions.like("name","zhang%");
criteria.add(cl);
Criterion c2=Restrictions.eq("age",23);
criteria.add(c2);

或者

Criterion cl=Restrictions.like("name","zhang%");
Criterion c2=Restrictions.eq("age",23);
Criterion c3=Restrictions.and(c1,c2);
criteria.add(c3);

Order类

对查询接口进行排序
通过Criteria的addOrder()方法添加到Criteria实例中,排序方式有
1、Order.desc(String propertyName) //降序排序
2、Order.asc(String propertyName)//升序排

criteria.add(Order.desc(id));

Projection接口

代表投影查询(查询某一列,把结果放到list中),它的Projections类提供了一系列产生具体Projectio实例的静态方法,通过Criteria的setProjection()方法添加到Criteria实例中,Projection类中的函数有
avg(String propertyName)
count(String propertyName)
sum(String propertyName)
min(String propertyName)
max(String propertyName)

离线查询(一般放在一个方法里,这样他可以附加到任意的session)

DetachedCriteria类可以在Session范围外创建一个查询,并且可以附加到任意的Sesssion上来执行查询

DetachedCriteria dc= DetachedCriteria.forClass(Class)
Criteria cr=dc.getExecutableCriteria(session);
cl.list

HQL

子查询(注意子查询的条件怎么写)

内嵌在另一个查询语句中的查询,称为子查询
HQL中的子查询只可以在select或者where子句中出现

String hql ="from XXX x where (select id from XX) "
session.createQuery(hql).list();

连接查询(执行了n+1条sql)

Hibernate中的连接查询只能在建立了关系映射的实体类之间进行可以通过HQL的with关键字,来提供额外的join条件,常见的连接查询有:
内连接([inner]join)
内连接(left [out]join)
内连接(right [out]join)
全连接([full]join)(oracle才支持)

抓取连接查询(无需执行多条sql)

fetch连接 ,只是使用一个查询语句就将相关关联的对象或者一组值的集合随着他们的父对象的初始化而初始化

在 相应的(内,左,右)join 后面 加入 fetch就行
fetch不能和 with 不能同时使用

原生(Native SQL)

单表查询

String sql=select * from xx_table;
//通过 Session.createSQLQuery()来获取SQLQuery接口实例,通过addEntity返回指定类型
SQLQuery query=session.createSQLQuery(sql).addEntity(Xxx.class)
List<Xxx> list=query.list();

多表查询,借助表的别名{a.},{o.}

String sql=select {a.*},{o.*} from aa_table a join bb_table b on a.id=b.id;
//通过别名指定返回类型
SQLQuery query=session.createSQLQuery(sql).addEntity("a",A.class).addEntity("b",B.class);
List list=query.list();
//返回一个Object数组可以这样写
for(int i=0;i<list.size();i++){
    Object[] obj=(Object[])list.get(i);
    A a=obj[0];
    B b=obj[1];
}

存储过程

存储过程/函数必须返回一个结果集,作为Hibernate能够使用的第一个外部参数,在程序中调用,也是使用了原生sql
session.createSQLQuery(“{存储过程}”);

SQLQuery query=session.createSQLQuery("{call pro(:id)}").addEntity(xx.class);
query.setInteger("id",1);
query.list();

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hibernate入门
Hibernate是什么     Hibernate是一个轻量级的ORMapping框架     ORMapping原理(Object Relational Mapping)    ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 4:一个类可以对应多个表,一个表也可以对应对个类 5:DB中的表可以没有主键,但是Obj
1313 0
Hibernate入门
引入Hibernate相关jar 配置文件 hibernate.cfg.xml和hibernate.properties其中之一 hibernate.cfg.xml配置文件 com.
1070 0
hibernate错误
今天研究新的架构。 数据库连接方式用的hibernate。 以前没有深入接触hibernate。先说一下流程。 po包,下面,实体类,Person.java    Person.hbm.xml映射文件。 出错如下:特别多,没有必要仔细看,粗略看看与你出错是不是一样就得了。 [ERROR][2016/01/07 09:54:29,723][org.springframework.
1289 0
Hibernate杂问
1 谈谈你对ORM框架的基本思想的了解?    首先 ORM是 对象关系映射,是为了解决类似于JDBC实现对象持久化的问题开发的。     框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射。
729 0
Hibernate注解
前言:   最近正在学习Hibernate通过注解(annotation)来管理映射关系,以前都是通过XML映射文件。下面拿个小例子说一下。 数据库物理模型: 数据库的描述:   一篇博客随笔可以分到不同的类中,一个类中又可以包含许多不同的博客随笔。
735 0
hibernate中带查询条件的分页
所谓分页,从数据库中分,则是封装一个分页类。利用分页对象进行分页。 但,分页往往带查询条件。   分页类的三个重要数据:【当前页码数】,【数据库中的总记录数】,【每页显示的数据的条数】 原理:select * from  【表名】 where   【字段名】  like   【'%条件%'】...
975 0
Hibernate模糊查询
和SQL查询一样,Hibernate,HQL使用like关键字进行模糊查询。模糊查询能够比较字符串是否与指定的字符串模式匹配。其中使用通配符表示:如下 %(百分号):匹配任意类型、任意长度的字符串,中文则需要两个百分号"%%" _(下划线):匹配单个任意字符,一般用来限制字符串表达式的长度。 下面举例说明: 1.检索姓名以"M"开头的同学:   String queryString="from
922 0
+关注
嘿嘿!!
不想当码农的程序员
150
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载