Hibernate提供的面向对象查询方式,通过正确配置关系,指定查询条件,就可以轻松得到数据,避免冗长sql代码。
Hibernate支持的数据查询方式包括:SQL,HQL,QBC
SQL,通过标准的SQL语句,定义数据查询请求,并通过Hibernate的SQL Query接口传递给数据库,执行SQL查询的步骤:
定义SQL查询指令字符串
创建SQL Query接口对象并传递指令
将指令执行后的结果集转换为持久化类对象
将多个对象集合成list返还
代码示例:
```
String sqlString="select * from table_test";
SQLQuery query=session.createSQLQuery(sqlString);
query.addEntity("table_test",Test.class);
List list=query.list();
OR
String sqlString="select * from table_test";
List list=session.createSQLQuery(sqlString).addEntity(sqlString).list();
```
HQL(Hibernate Query Language)语法结构类似SQL,它的查询实现步骤:
创建查询对象
参数赋值
得到查询结果
```
单一属性查询
String hql="select name from Student where age>:tage";
List<Student> list=session.createQuery(hql).setInteger("tage",20).list();
for(Student s:list){
System.out.println(s);
}
多属性查询
String hql="select name,age from Student where age>:tage";
List<Student> list=session.createQuery(hql).setInteger("tage",20).list();
for(Student s:list){
System.out.println("姓名为:”+s[0]+",年龄为:“+s[1]);
}
投影查询
String hql="select new Student(name,age) from Student where age>:tage";
List<Student> list=session.createQuery(hql).setInteger("tage",20).list();
for(Student s:list){
System.out.println("姓名为:”+s.getName()+",年龄为:“+s.getAge());
}
模糊查询
String hql="from Student where name like '%小_'";
分组查询
利用having,group by查询
String hql1="from Student group by age";
String hql2="select age from Student group by age";
String hql3="select age from Student group by age having count(age)>1";
分页查询
数据量大时,分页查询可以使得前台页面更加美观
Query query = session.createQuery(“from Student as c order by c.id”);
query.setFirstResult(5);
query.setMaxResults(15);
List list = query.list();
setFirstResult()设定查询结果的起始位置,从0开始数
setMaxResult()设定每次检索出得最大记录数
支持连接查询,在HQL中可以使用内链接、外连接、交叉连接
```
QBC(Query By Criteria)使用Hibernate的Criteria API进行数据检索方式,通过session类创建Criteria实例,并调用该实例的不同方法进行数据检索。
Criteria是一个装载条件的容器(将查询条件封装为一个Criteria对象),该容器会自动解析查询条件来进行数据检索,非常适合动态查询
采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句
QBC提供了检索对象的另外一种方式,它主要是由Criteria接口、Criterion接口和Expression类组成,它支持在运行时动态生成查询语句
QBC查询方式的实现步骤:
调用session的createCriteria()方法创建一个Criteria对象
设定查询条件
Expression类提供了一系列用于设定查询条件的静态方法,这些静态方法都返回Criterion实例
每个Criterion实例代表一个查询条件
通过Criteria的add()方法加入查询条件