Hibernate——HQL、QBC检索方式
一、HQL检索方式
以双向的一对多来测试HQL检索方式。以Department和Employee为例。
建表语句:
CREATETABLEdepartment
(
dept_idINT(11)PRIMARYKEYNOTNULLAUTO_INCREMENT,
dept_nameVARCHAR(50)
);
CREATEINDEXFK_8hf3vewo7w3v9doungcc51wwyONdepartment(dept_id);
复制代码
CREATETABLEemployee
(
emp_idINT(11)PRIMARYKEYNOTNULLAUTO_INCREMENT,
emp_nameVARCHAR(50),
salaryFLOAT,
dept_id_fkINT(11),
CONSTRAINTFK_miun1wlqp4ujpsgfshyfi7g9jFOREIGNKEY(dept_id_fk)REFERENCESdepartment(dept_id)
);
CREATEINDEXFK_miun1wlqp4ujpsgfshyfi7g9jONemployee(dept_id_fk);
复制代码
对应的实体和hbm文件
publicclassDepartment{
privateIntegerdeptId;
privateStringdeptName;
privateSetemps=newHashSet<>();
}
publicclassEmployee{
privateIntegerempId;
privateStringempName;
privateFloatsalary;
privateDepartmentdept;
}
Department.hbm.xml
Employee.hbm.xml
1.在查询语句中设定各种查询条件
复制代码
@Test
publicvoidtestHql(){
Departmentdept=newDepartment();
dept.setDeptId(7);
Listlist=session.createQuery("FROMEmployeeewheree.empNamelike?ande.empId>?anddept=?orderbye.empId"+
"desc")
.setString(0,"%b%").setInteger(1,3).setEntity(2,dept).list();
for(Employeeemployee:list){
System.out.println(employee);
}
}
复制代码
说明:
(1)通过Session的createQuery(hql)方法创建一个Query对象,hql支持动态绑定参数。调用Query的相关方法执行查询。
(2)Query接口支持链式操作,它的setXxx()方法返回自身实例。
(3)方法setEntity(obj),obj只需要绑定一个id就可以。
(4)支持orderby排序。
(5)参数的位置从0开始。
复制代码
@Test
publicvoidtestHqlNamed(){
Listlist=session.createQuery("fromEmployeeewheree.empNamelike:nameande.empId>:idande.dept=?")
.setString("name","%a%").setInteger("id",1).list();
for(Employeeemployee:list){
System.out.println(employee);
}
}
复制代码
说明:
(1)支持按照参数名字查询,定义的参数名以":"开头。
2.查询对象的部分属性(查询结果仅包含实体的部分属性)
复制代码
@Test
publicvoidtestPropertyQuery(){
Departmentdept=newDepartment();
dept.setDeptId(7);
List |
|