天天看点

数据查询方式

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()方法加入查询条件
           

继续阅读