什么是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字段。因此报错。