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();
相关文章
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
|
4月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
135 0
|
4月前
|
SQL Java 数据库连接
|
4月前
|
缓存 Java 数据库连接
什么是 Hibernate 查询语言或 HQL?
【8月更文挑战第21天】
125 0
|
4月前
|
SQL Java 数据库连接
在 Hibernate 中何时使用条件查询?
【8月更文挑战第21天】
50 0
|
4月前
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
39 0
|
4月前
|
SQL 安全 Java
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(DeptTest.java)
Hibernate中使用Criteria查询及注解——(DeptTest.java)

相关课程

更多