第十一章 Hibernate的查询 Query by Criteria(QBC)

简介: <p style="margin-bottom:0cm"><span style="font-family:Times New Roman,serif">QBC(QueryByCriteria)</span>查询方式是<span style="font-family:Times New Roman,serif">Hibernate</span>提供的“更加面向对象”的一种检索方式。<spa

QBC(QueryByCriteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。 

1、Hibernate应用中使用QBC查询通常经过3个步骤
 (1)
使用Session实例的createCriteria()方法创建Criteria对象
 (2)
使用工具类Restrictions的相关方法为Criteria对象设置查询对象
 (3)
使用Criteria对象的list()方法执行查询,返回查询结果

2、一般的用法:
//查询名字为zhangsan的用户
			Criteria criteria = session.createCriteria(User.class);
			criteria.add(Restrictions.eq("username", "zhangsan"));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}


3、Restrictions用法

HibernateRestrictions的方法       说明 
Restrictions.eq                                    
= 
Restrictions.allEq                               
利用Map来进行多个等于的限制 
Restrictions.gt                                     
> 
Restrictions.ge                                    
>= 
Restrictions.lt                                      

Restrictions.le                                      
<= 
Restrictions.between                           BETWEEN
Restrictions.like                                   LIKE
Restrictions.in                                     in
Restrictions.and                                  and
Restrictions.or                                     or
Restrictions.sqlRestriction                 
SQL限定查询 


查询id大于100,小于200的用户:

Criteria criteria = session.createCriteria(User.class);
			criteria.add(Restrictions.gt("id", 100)).add(Restrictions.lt("id", 200));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
		}



4、QBE (Query ByExample)

通过Example工具类,判断Example.create(example)传进来的example对象里面各个属性是否与数据库中配置。

//查询名字为zhanglinlin的所有的用户
			Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}


5、Order提供设置排序方式

Order.asc(StringpropertyName)
升序排序
Order.desc(StringpropertyName)
降序排


Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			//criteria.addOrder(Order.asc("id"));
			criteria.addOrder(Order.desc("id"));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}


6、Projections提供对查询结果进行统计与分组操作 

Porjections.avg(StringpropertyName)
求某属性的平均值
Projections.count(StringpropertyName)
统计某属性的数量
Projections.countDistinct(StringpropertyName)
统计某属性的不同值的数量
Projections.groupProperty(StringpropertyName)
指定一组属性值
Projections.max(StringpropertyName)
某属性的最大值
Projections.min(StringpropertyName)
某属性的最小值
Projections.projectionList()
创建一个新的projectionList对象
Projections.rowCount()
查询结果集中记录的条数
Projections.sum(StringpropertyName)
返回某属性值的合计


//查询有多少个人的名字为zhanglinlin的
			Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			criteria.setProjection(Projections.count("id"));
			Integer count = (Integer) criteria.uniqueResult();
		System.out.println(count);



7、QBC分页查询  

Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			criteria.setFirstResult(0); //从哪一个记录开始
			criteria.setMaxResults(5);//取多少条记录
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}





目录
相关文章
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
439 0
|
SQL Java 数据库连接
|
缓存 Java 数据库连接
什么是 Hibernate 查询语言或 HQL?
【8月更文挑战第21天】
534 0
|
SQL Java 数据库连接
在 Hibernate 中何时使用条件查询?
【8月更文挑战第21天】
147 0
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
126 0
|
SQL 安全 Java
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
162 1
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
181 1