一、Hibernate的三种查询方式
1.HQL(HibernateQueryLanuage)语句,这是类似SQL语句的一种对象化查询语句.
2.使用Criteria对象,进行按条件查询(QuerybyCriteria,简称QBC)和按示例查询(QuerybyExample简称QBE).
3.生成原生的sql(NativeSQL)语句.
二、Criteria的基本使用
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.List<Testbook>list=criteria.list();
4.tx.commit();
查询Testbook中所有的数据,然后返回
三、Criteria接口的核心方法
add()增加一个代表查询条件的Criterion对象
addOrder()增加一个代表排序的Criterion对象
createAlias()创建关联查询,为所关联的持久化类建立别名
createCriteria()在相互关联的持久化类之间建立条件约束
setFirstResult()设定要获取的第一条记录的位置
setMaxResults()设定要获取的记录的最大数量
list()获取满足查询条件的记录的集合
uniqueResult()获取满足查询条件的唯一记录
四、对查询结果进行排序
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class).add(
3.Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));
4.criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));
5.List<Testbook>list=criteria.list();
6.tx.commit();
五、实现分页显示数据
Java代码
1.<spanstyle="font-size:x-small;">Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class).add(
3.Restrictions.like("name","任%"));
4.criteria.addOrder(Order.desc("id"));
5.criteria.setMaxResults(30);
6.criteria.setFirstResult(10);//setFirstResult()从0开始计数
7.List<Testbook>list=criteria.list();
8.tx.commit();</span>
六、只查询一条记录
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class).add(
3.Restrictions.like("name","任%"));
4.criteria.addOrder(Order.desc("id"));
5.criteria.setMaxResults(1);
6.Testbooktb=(Testbook)criteria.uniqueResult();
7.tx.commit();
七、Restrictions类
HQL运算符 |
QBC运算符 |
含义 |
= |
Restrictions.eq() |
等于equal |
<> |
Restrictions.ne() |
不等于notequal |
> |
Restrictions.gt() |
大于greaterthan |
>= |
Restrictions.ge() |
大于等于greaterthanorequal |
< |
Restrictions.lt() |
小于lessthan |
<= |
Restrictions.le() |
小于等于lessthanorequal |
isnull |
Restrictions.isnull() |
等于空值 |
isnotnull |
Restrictions.isNotNull() |
非空值 |
like |
Restrictions.like() |
字符串模式匹配 |
and |
Restrictions.and() |
逻辑与 |
and |
Restrictions.conjunction() |
逻辑与 |
or |
Restrictions.or() |
逻辑或 |
or |
Restrictions.disjunction() |
逻辑或 |
not |
Restrictions.not() |
逻辑非 |
in(列表) |
Restrictions.in() |
等于列表中的某一个值 |
notin(列表) |
Restrictions.not(Restrictions.in()) |
不等于列表中任意一个值 |
betweenxandy |
Restrictions.between() |
闭区间xy中的任意值 |
notbetweenxandy |
Restrictions.not(Restrictions..between()) |
小于值X或者大于值y |
<----------------------------------------------------------------------------------------------------------->
八、条件"或"方式组合查询条件
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.Criterioncriterion1=Restrictions.or(Restrictions.like("name","任%"),
4.Restrictions.between("id",1000,1010));
5.criteria.add(criterion1);
6.List<Testbook>list=criteria.list();
7.tx.commit();
九、使用原生SQL语句设定查询条件
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.criteria.add(Restrictions.sqlRestriction("{alias}.name=?","Narcissus",Hibernate.STRING));
4.List<Testbook>list=criteria.list();
5.tx.commit()
十、统计函数查询
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Projections.max("price"));
4.DoublemaxValue=(Double)criteria.uniqueResult();
5.tx.commit();
6.System.out.println(maxValue);
十一、统计函数组合查询条件
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Projections.max("price"));
4.DoublemaxValue=(Double)criteria.uniqueResult();
5.tx.commit();
6.System.out.println(maxValue);
十二、获取多个统计函数的值
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.ProjectionListproList=Projections.projectionList();
4.proList.add(Projections.max("price"));
5.proList.add(Projections.min("price"));
6.proList.add(Projections.avg("price"));
7.proList.add(Projections.sum("price"));
8.proList.add(Projections.count("price"));
9.proList.add(Projections.countDistinct("price"));
10.proList.add(Projections.rowCount());
11.criteria.setProjection(proList);
12.Objectvalues[]=(Object[])criteria.uniqueResult();
13.tx.commit();
十三、分组查询
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Projections.groupProperty("price"));
4.List<Double>list=criteria.list();
5.tx.commit();
十四、分组统计
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.ProjectionListproList=Projections.projectionList();
4.proList.add(Projections.rowCount());//商品的个数
5.proList.add(Projections.sum("price"));
6.proList.add(Projections.groupProperty("name"));
7.criteria.setProjection(proList);
8.List<Double>list=criteria.list();
9.tx.commit();
十五、投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Property.forName("price"));
4.criteria.add(Restrictions.gt("price",newDouble(40.0)))
5.List<Double>list=criteria.list();
6.tx.commit();
十六、使用Property类的forName()方法实现分组统计
Java代码
1.Transactiontx=session.beginTransaction();
2.Criteriacriteria=session.createCriteria(Testbook.class);
3.ProjectionListproList=Projections.projectionList();
4.proList.add(Projections.forName("price").max());
5.proList.add(Projections.forName("price").min());
6.proList.add(Projections.forName("price").avg());
7.proList.add(Projections.forName("category.id").group().as("c"));
8.criteria.setProjection(proList);
9.criteria.addOrder(Order.desc("c"));
10.List<Object[]>list=criteria.list();
11.tx.commit();
十七、使用DetachedCriteria对象实现离线查询
Java代码
1.//在表现层,构造DetachedCriteria对象,保存用户动态的查询条件
2.DetachedCriteriadetchedCriteria=DetachedCriteria.forClass(Testbook.class);
3.detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",newInteger(1),newInteger(10)));
4.detchedCriteria.addOrder(Order.desc("id"));
6.//在业务逻辑层,DetachedCriteria对象与当前的Session对象进行绑定,获取查询结果
7.Sessionsession=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
8.Transactiontx=detchedCriteria.getExecutableCriteria(session);
9.List<Testbook>list=criteria.list();
10.tx.commit();
十八、根据示例对象进行查询
先定义一个模板然后把这个模板的样式传进去,查询,例如这里定义的Testbook中的名字为Narcissus的字段,进行查询,条件可以为一个也可以为多个,对应的就是where中的条件
Java代码
1.Testbooktb=newTestbook();
2.tb.setName("Narcissus");
3.Sessionsession=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
4.Transactiontx=session.beginTransaction();
5.Criteriacriteria=session.createCriteria(Testbook.class);
6.Criteria.add(Example.creaate(tb));
7.List<Testbook>list=criteria.list();
8.tx.commit();
相关推荐
**Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...
### Hibernate的查询方式详解 #### 引言 Hibernate作为Java领域中最流行的ORM(Object-Relational Mapping)框架之一,提供了一系列高效、灵活的查询机制,旨在桥接对象模型与关系数据库之间的鸿沟。本文将深入...
### Hibernate 查询方式与批处理及连接池配置详解 #### 一、Hibernate 查询方式介绍 Hibernate 是一款优秀的 ORM(对象关系映射)框架,它能够极大地简化数据库操作,并提供多种查询方式来满足不同的业务需求。 #...
hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置...hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式
【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的...理解并熟练掌握这些查询方式,将有助于我们在Java开发中更好地运用Hibernate。
### Hibernate中的查询方式详解 #### 一、HQL查询(Hibernate Query Language) HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的一个显著优势在于它具有很好的跨数据库能力,这...
9. **Hibernate查询方式**: - **SQL**:直接执行SQL查询。 - **Criteria API**:面向对象的查询方式。 - **HQL(Hibernate Query Language)**:面向对象的查询语言,支持属性、参数、关联、分页和统计函数查询...
根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...
无论哪种查询方式,最后都会返回一个结果列表,你可以遍历这个列表来获取并处理查询到的`username`字段的值。 总结,Hibernate提供多种方式查询数据表中的字段,包括HQL、Criteria API和DetachedCriteria,选择合适...
本文将详细阐述通过三种查询方式跟踪Hibernate源码的方法,帮助开发者更好地掌握其工作原理。 首先,我们来看第一种查询方式:HQL(Hibernate Query Language)查询。HQL是Hibernate专有的SQL方言,允许开发者以...
### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...
在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...
利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~
hibernate查询详解 在Java开发中,Hibernate作为一款强大的ORM(Object-Relational Mapping)框架,极大地简化了数据库操作。本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询...
4. 使用 Hibernate 条件 API:提供了类型安全的面向对象的方式执行查询。 5. 使用本地 SQL 查询:Hibernate 只关心把 JDBC 结果集映射到持久对象图。 使用 HQL 的优点: * HQL 是一种面向对象的查询语言,易于学习...
**六、Hibernate 查询方式** 1. **HQL**: Hibernate 专有的查询语言,类似SQL,但操作的是对象。 2. **Criteria API**: 动态构建查询条件,更加面向对象的查询方式。 3. **Native SQL**: 直接使用原生SQL进行查询,...
六种方式实现Hibernate查询 Hibernate是一个功能强大的持久层框架,它提供了多种方式来查询数据库。下面我们将详细介绍六种方式实现Hibernate查询。 HQL查询 HQL(Hibernate Query Language)是Hibernate自己的...
Hibernate提供了两种主要的查询方式:离线查询(Criteria API)和HQL(Hibernate Query Language)语句查询。这两种查询方法各有特点,适用于不同的场景,使得开发者可以根据实际需求灵活选择。 1. Hibernate ...
在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...
最后,`hibernate查询`这个压缩包可能包含了一些示例代码和配置文件,用于演示如何在Java项目中实现上述查询方式。通过分析这些文件,你可以更好地理解Hibernate查询的工作原理,并将其应用到自己的项目中。 总之,...