hibernate中的查询小结

来源:互联网 发布:淘宝联盟怎么买东西 编辑:程序博客网 时间:2024/05/19 13:28

hibernate查询

hibernate支持三种查询方式:HQL(Hibernate Query Language,hibernate查询语言),Criteria,及原生SQL查询(Native Sql)
from子句
from Emp as emp;(as 关键字可选)
from Emp emp;
from com.hibernate.entity.Emp; (全限定名) 
select子句
select dept from Dept as dept;(select 后跟的是别名)
select dept.deptName from Dept as dept;
where子句
from Dept where deptName='SALES';
from Dept as dept where dept.deptName='SALES';
from Dept as dept where dept.location is not null;地址不为空的部门
使用表达式
from Dept as dept where lower(dept.deptName)='sales';lower()函数用于把字符串中的每个字母变成小写
from Emp where year(hireDate)=1980;year()函数用于获取日期字段的年份
order by子句

from Emp order by hireDate asc;
from Emp order by hireDate (asc) ,salary desc;不写默认为升序,先按入职升序,再按薪资降序排序
*******************************
执行HQL语句的步骤:
获取session对象
编写HQL语句
创建Query对象
执行查询,获得结果


query执行查询的两种方式:
String hql="from Emp";
Query query=session.createQuery(hql);//构建query对象
1,list()
List<Emp> emps=query.list();//query的list()方法 Return the query results as a List.
//遍历集合
for(Emp emp:emps){
System.out.println(emp.getName());
}

2,iterator()
Iterator<Emp> iterator=query.iterate();//Return the query results as an Iterator.
Emp emp=null;
while(iterator.hasNext){
emp=iterator.next();//为变量赋值
System.out.println(emp.getName());
}
******************************************
在查询语句中绑定参数
参数绑定形式:
1,按参数位置绑定
2,按参数名称绑定
绑定各种类型的参数
setBoolean();绑定类型为java.lang.Boolean的参数
setByte();绑定类型为java.lang.Byte的参数
setDouble();绑定类型为java.lang.Double的参数
setString();绑定类型为java.lang.String的参数
setDate();绑定类型为java.util.Date的参数

以上每个方法都有两种重载形式,如setString()有如下两种重载形式
setString(int position,String val);
setString(String name,Strign val);
除了以上用于绑定特定类型参数的方法外,Hibernate还提供2个特殊的参数绑定方法
setProperties();绑定命名参数与一个对象的属性值
setParameter();当不确定参数的类型时可以用该方法为参数赋值
**************************************
投影查询用于查询持久化类部分或全部属性
投影查询有三种方式
1,将每条结果封装成object对象
2,将每条结果封装成object数组
String hql="select deptName,location from Dept";
Query query=session.createQuery(hql);//构建query对象
List<Object[]> deptlist=query.list();//query的list()方法 Return the query results as a List.
//遍历集合
for(Object[] dept:deptlist){
System.out.println("部门名称"+dept[0]+"部门地址"+dept[1]);
}
3,将每条查询结果通过构造函数封装成对象
String hql="select new Dept(deptName,location) from Dept";
Query query=session.createQuery(hql);//构建query对象
List<Dept> deptlist=query.list();//query的list()方法 Return the query results as a List.
//遍历集合
for(Dept dept:deptlist){
System.out.println("部门名称"+dept.getdeptName()+"部门地址"+dept.getLocation());
}

1 0