Hibernate的查询方案(应该熟悉各种查询的使用方法)

本文介绍Hibernate框架下多种查询方法,包括CriteriaQuery和HQL等,并详细解释了如何利用这些方法进行条件筛选、聚合函数使用及结果排序等操作。
1、利用Session接口提供的load方法或者get方法

2、Hibernate提供的主要查询方法

1)Criteria Query(条件查询)的步骤:

(1)通过Session来创建条件查询对象Criteria

Criteria criteria = session.createCriteria(Course.class);

(2)构建条件---创建查询条件对象Criterion

Criterion criterion1 = Property.forName("id").ge(39);//通过Property来创建

Criterion criterion2 = Restrictions.le("cycle", 5); //通过Restrictions来创建

(3)查询对象关联条件

criteria.add(criterion1);

(4)执行条件查询

List<Course> courses = criteria.list();

2)HQL(Hibernate Qurey Language)

特点: 语法上与SQL类似; 完全面向对象的查询; 支持继承、多态、关联

(1) FROM子句

例如:查询所有的学生实例

Query query=session.createQuery("from Student");

query.list();

(2) SELECT子句

选择哪些对象和属性返回到结果集

A、SELECT语句后可以跟多个任意类型的属性,返回结果保存在Object类型的数组中

//A、B、C、都是查询学生的姓名和年龄

Query query=session.createQuery("select stu.name,stu.age from Student as stu");

List<Object[]> os=query.list();//返回的Object数组中有两个元素,第一个是姓名,第二个是年龄

B、SELECT语句后可以跟多个任意类型的属性,返回结果也可以保存在List中

Query query=session.createQuery ("select new List(stu.name,stu.age) from Student as stu");

List<List> lists=query.list();

C、SELECT语句后可以跟多个任意类型的属性,返回结果也可以是一个类型安全的POJO对象

Query query=session.createQuery

("select new Student(stu.name,stu.age) from Student as stu");

List<Student> stuList=query.list();//注意:Student类必须有Student(String,int)的构造方法

D、SELECT子句中可以使用聚集函数、数学操作符、连接

支持的聚集函数:avg、sum、min、max、count ….

(3) WHERE子句,限制返回结果集的范围

(4) ORDER BY子句,对返回结果集进行排序

/**
* hql 查询语句
*/
public void query(){
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sf = configuration.buildSessionFactory();
Session session = sf.openSession();
//Transaction t = session.beginTransaction();
String hql = " select p.pname , p.page from Person p where p.page > 20 " ;
Query query = session.createQuery( hql );
List list = query.list();

System.out.println( list.size() );
for ( int i = 0 ; i < list.size() ; i ++ ) {
Object object[] = ( Object[])list.get(i);
for ( int k = 0 ; k < object.length ; k ++ ) {
System.out.println( object[k] );
}
}

}

/**
* hql 查询语句 new List ()
*/
public void show(){
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sf = configuration.buildSessionFactory();
Session session = sf.openSession();
//Transaction t = session.beginTransaction();
String hql = " select new List( p.pname , p.page ) from Person p where p.page > 20 " ;
Query query = session.createQuery( hql );
List<List> list = query.list();

System.out.println( list.size() );
for ( int i = 0 ; i < list.size() ; i ++ ) {
System.out.println( (list.get(i)));
}

}
/**
* hql 查询语句 new Map () ;
*/
public void show1(){
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sf = configuration.buildSessionFactory();
Session session = sf.openSession();
//Transaction t = session.beginTransaction();
String hql = " select new Map( p.pname as pname, p.page as page ) from Person p where p.page > 20 " ;
Query query = session.createQuery( hql );
List list = query.list();

System.out.println( list.size() );
for ( int i = 0 ; i < list.size() ; i ++ ) {
System.out.println( ((HashMap)list.get(i)).get("pname"));
System.out.println( ((HashMap)list.get(i)).get("page"));
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值