hibernate之QBC查询

本文深入解析了QBC(Query By Criteria)技术,一种面向对象的数据库操作方法,详细介绍了其查询流程,包括Configuration配置、Session会话管理、Criteria对象创建及约束条件设置,并通过实例演示了如何处理关联表查询及分页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是QBC?
QBC全称query by criteria,是一种完全面向对象的对数据库进行增删改查的技术。

QBC查询方式:

1、和hibernate中的主键查询一样,也需要获取到Configuration,然后通过configure()方法读取主配置文件。
2、通过Configuration对象获取与数据库的session会话连接。
3、通过session创建Criterria对象,该对象用于生成sql,Restrictions对象用于设置约束条件。
4、如果对于需要查询的约束条件是另一张表中的非主键约束,是其他字段的约束,则可以给表取别名。
  例如:
   session.createCriteria(Emp.class,"e").createAlias("e.dept","d");
5、调用Criteria中的list方法,获取查询结果。

分页:
使用Criteria中的setFirstResult()设置起始位置,setMaxResult()设置每页的记录数。

注意:
因为当多个实体类建立了映射,这时候想查其它表除关联字段以外的字段,必须给关联的表取别名。

例如:emp表和dept表使用deptNo进行关联。使用emp的class作为qcb查询的字节码文件的话,如果这时候需要查询emp除deptNo的字段作为约束条件的话则需要这样:
正确写法:

	    //dept为Emp表中的属性
	    Criteria criteria=session.createCriteria(Emp.class).createAlias("dept","d");
	    criteria.add("d.deptName","SALES");

因为这里单独把关联的表,提取出来了,取了一个别名所以不会认为d.deptName是emp实体类和emp表中的了;而是会去dept表和dept类中找了。

错误写法:

	    Criteria criteria=session.createCriteria(Emp.class);
	    criteria.add("dept.deptName","SALES");

在这里插入图片描述
因为hibernate会认为dept.deptName是Emp实体类中的属性,emp表中的字段,而在Emp中的实体类中并没有deptName属性,在emp表中也不存在deptName字段。因此报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值