例子1
//获得Hibernate Session
Session sess = HibernateUtil.currentSession();
//开始事务
Transaction tx = sess.beginTransaction();
//以HQL语句创建Query对象.
//执行setString方法为HQL语句的参数赋值
//Query调用list方法访问查询的全部实例
List pl = sess.createQuery("select distinct p from Person p "
+ "join p.myEvents where title = :eventTitle")
.setString("eventTitle","很普通的事情")
.list();
//遍历查询的全部结果
for (Iterator pit = pl.iterator() ; pit.hasNext(); )
{
Person p = (Person)pit.next();
System.out.println(p.getName());
}
//提交事务
tx.commit();
HibernateUtil.closeSession();
例子2
//获得Hibernate Session对象
Session sess = HibernateUtil.currentSession();
Transaction tx = sess.beginTransaction();
//解析出Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start = sdf.parse("2005-01-01");
System.out.println("系统开始通过日期查找人" + start);
//通过Session的createQuery方法创建Query对象
List pl = sess.createQuery("select distinct p from Person p "
+ "inner join p.myEvents event where event.happenDate "
+ "between :firstDate and :endDate")
//设置参数
.setDate("firstDate",start)
.setDate("endDate",new Date())
//返回结果集
.list();
//遍历结果集
for (Iterator pit = pl.iterator() ; pit.hasNext(); )
{
Person p = ( Person )pit.next();
System.out.println(p.getName());
}
tx.commit();
HibernateUtil.closeSession();
例子3
//获得Hibernate Session
Session sess = HibernateUtil.currentSession();
//开始事务
Transaction tx = sess.beginTransaction();
//以HQL语句创建Query对象.
//执行setString方法为HQL语句的参数赋值
//Query调用list方法访问查询的全部属性
List pl = sess.createQuery("select distinct p.id, p.name , p.age "
+ "from Person p join "
+ "p.myEvents")
.list();
//遍历查询的全部结果
for (Iterator pit = pl.iterator() ; pit.hasNext(); )
{
Object[] objs = (Object[])pit.next();
System.out.println(java.util.Arrays.toString(objs));
}
//提交事务
tx.commit();
HibernateUtil.closeSession();
使用规则
hibernate是面对对象的,所以其用法也是面向对象查询的,
1-1.from字句
from Person as p
内链接
from Person p inner join p.myEvent event where event.happenDate < :endDate
使用格外条件with
from Person p inner join p.myEvent event with p.id > event.id where event.happenDate < :endDate
select p.name from Person as p
将属性存入list中
select new list(p.name,...) from Person p
select count(*) from Person as p
使用from Person as p 会把p的子类都查询出来
1-6.where子句
跟sql差不多,主要是把表操作换成类操作
1-7.HQL支持表达式操作
表达式很多例如
select p.name from Person p where id > 0
order by p.name,p.address asc//升序
order by p.name,p.address desc//降序
1-9.groub by子句
使用having对分组的数据进行过滤